[英]MySQL - Joining a table to itself, but keeping original results
我有以下查询:
SELECT a.`graph_value_id`,
SUM( a.`value` ) AS value,
DATE( DATE_ADD( a.`date_time`, INTERVAL 5 DAY ) ) AS date_time
FROM `graph_values` AS a
LEFT JOIN `graph_values` AS b ON ( a.`graph_id` = b.`graph_id` )
WHERE a.`graph_id` = 921
GROUP BY DATE( a.`date_time` )
HAVING date_time >= MIN( b.`date_time` ) AND date_time <= MAX( b.`date_time` )
ORDER BY a.`date_time` DESC
下表如下:
如果删除LEFT JOIN(及其所有引用),则查询结果正确。
我遇到的问题是,(一,总和value
)得到大大歪斜。
我加入第二张表的唯一原因是,我可以获取可用于同一组数据的MIN和MAX日期。
有谁知道我如何做到这一点?
问题是,您正在有效地创建两个表中所有匹配的行参数,并对这些对进行求和,这将给您带来太大的影响。
解决方案:使用一个派生查询执行您的总和,使用另一个派生表获取最小值和最大值,然后将两个派生表合并以获取结果。
SELECT T1.graph_id, T1.col1, T1.col2, T2.col1, ...
FROM (
SELECT graph_id, SUM(...) AS total
FROM ...
GROUP BY ...
) T1
JOIN (
SELECT graph_id, MIN(...) AS minfoo, MAX(...) AS maxfoo
FROM ...
GROUP BY ...
) T2
ON T1.graph_id = T2.graph_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.