繁体   English   中英

MySQL-将表联接到自身,但保留原始结果

[英]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

下表如下:

  • graph_value_id(int)
  • graph_id(int)
  • 价值(浮动)
  • date_time(日期时间)
  • date_created(日期时间)
  • date_updated(时间戳)

如果删除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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM