无法从联接子查询中进一步选择。
我有三个表中的数据:“events”、“records”和“work_list”(名称不重要)。每个表都有一块拼图,其中work_list最短,包含顶级数据,events表跟踪许多微小的频繁事件。
我需要根据work_list中定义的一些关键变量(如加权移动平均值等)计算事件中的许多统计变量。尽管如此,我已经准备好了这些指标并正在工作,但我在根据work_list中存储的选定参数过滤事件中的数据时遇到了问题。
这里有一段代码不起作用。SELECT * 并不重要,我稍后会将其更改为更有意义的,它是这样的,因为清晰。然而,我尝试了许多选择来代替 *,但没有成功。
那么这个来自子查询的查询有什么问题呢?
查询示例一:
SELECT * FROM
(SELECT events.id, events.type,events.timestamp, work_list.task
FROM
( events
INNER JOIN records ON events.record_id = records.id
INNER JOIN work_list ON records.work_list_id = work_list.id
)
WHERE work_list.customer_number = '1234' AS subquery
);
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as subquery ) LIMIT 0, 25' at line 8
我检查了内部连接子查询是否工作正常,并且它返回了一个外观正常的表
查询示例二:
SELECT events.id, events.type,events.timestamp, work_list.task
FROM
( events
INNER JOIN records ON events.record_id = records.id
INNER JOIN work_list ON records.work_list_id = work_list.id
)
WHERE work_list.customer_number = '1234';
我试过以不同的顺序使用括号,我在这里改变了选择的变量SELECT events.id, events.type,events.timestamp, work_list.task
,我也试过在互联网上找到这种例子,但没有成功,这让我怀疑这实际上是不是做这种查询的一种糟糕的方式,然而,我已经准备好了计算部分,我真的很想让这个子查询沿着运行,所以即使有更好的结构来解决这个问题,我最感兴趣的是保持这种结构的解决方案。
此阶段的目标是过滤事件表,以获得在其上编码的进一步查询,从而取代"SELECT *"
。
尤西
编辑:这些是我计划在解决查询示例1的问题时使用的前面所做的最终计算。
查询示例三:
SELECT *, ((SUM(rate * diff) OVER(ORDER BY startTime
ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)) /
(SUM(diff) OVER(ORDER BY startTime
ROWS BETWEEN 4 PRECEDING AND CURRENT ROW))) as rate_WMA
FROM (
SELECT id, startTime, counts, diff, (counts / diff)*3600 as rate FROM (
SELECT id, TIMESTAMPDIFF(SECOND, MIN(timestamp), MAX(timestamp))AS diff, SUM(change) as counts, MIN(timestamp) as startTime
FROM `the filered subquery here`
GROUP BY id
)AS subquery WHERE diff > 0
) as totaltotal;
1条答案
按热度按时间wrrgggsh1#
您可以使用额外的括号(不需要),并且子查询的别名应放在子查询之后: