MariaDB从内部连接查询中选择

nzk0hqpo  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(132)

无法从联接子查询中进一步选择。
我有三个表中的数据:“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;
wrrgggsh

wrrgggsh1#

您可以使用额外的括号(不需要),并且子查询的别名应放在子查询之后:

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;

相关问题