2011-06-09 61 views
0

我有两个表格,其结构相同,每5分钟捕获3行数据。由此,我试图使用T1的最大合计值每天检索一行。例如,MySQL - 根据一个表的MAX(聚合值)从两个表中检索一行

T1
dateTime |名称|值
2011-06-05 00:00:00 |约翰尼| 20
2011-06-05 00:00:00 |罗伯特| 30
2011-06-05 00:00:00 |劳伦| 24

2011-06-05 00:00:05 |约翰尼| 12
2011-06-05 00:00:05 |罗伯特| 10
2011-06-05 00:00:05 |劳伦| 10
...
2011-06-06 00:00:00 | etc

T2
dateTime |名称|值
2011-06-05 00:00:00 |约翰尼| 8
2011-06-05 00:00:00 |罗伯特| 12
2011-06-05 00:00:00 |劳伦| 24
2011-06-05 00:00:05 |约翰尼| 52
2011-06-05 00:00:05 |罗伯特| 16
2011-06-05 00:00:05 |劳伦| 25
...
2011-06-06 00:00:00 |等

在上面的例子中,T1的聚集前3行比第二组3行(12 + 10 + 10)具有更高的值(20 + 30 + 24)。一旦我建立了哪个时间戳具有来自T1的最高(MAX)聚合值,我想从T2获取相对聚合值。在这种情况下,它将在00:00:00的值为8 + 12 + 24。请注意,这将持续数天,因此所需输出为:

dateTime | T1AggregatedValues | T2AggregatedValues
2011-06-05 00:00:00 | 74 | 44
2011-06-06 xTime | y | z
2011-06-07 xTime | y | z

我试过使用SELECT * FROM T1 WHERE value=(SELECT MAX(value) FROM T1)作为起点,但这只是给了我一个T1的最大值。我对如何进步感到非常失望?

回答

1
SELECT dateTime, SUM(value) AS valueSum 
FROM T1 
GROUP BY dateTime 
ORDER BY valueSum DESC 

这会给你所有的dateTime组,首先列出最高的聚合。根据您的逻辑,您可能必须处理多个dateTime组具有相同聚合值的可能性,而不是假定第一个结果是最高的。无论采用哪种方式,你使用隔离

SELECT dateTime, MAX(valueSum) FROM 
(
    SELECT dateTime, SUM(value) AS valueSum 
    FROM T1 
    GROUP BY dateTime 
    ORDER BY valueSum DESC 
) AS sumTable 

如果你知道绝对是确保你只能得到1个最高总组(无并列最高聚集的可能性),那么你可以这样做您声明一个组的总数最高,一旦您确定了该组,您就获取该组的日期时间,并从T2中检索SUM(value)

+0

在第二个查询中,ORDER BY不是必需的,但我将其留在了第2个查询与第1个查询相关的方面,即第1个查询在第2个查询中扮演子查询的角色。 – 2011-06-09 20:46:39

+0

感谢您的帮助 - 我99.9%确信在计算总量时不会存在联系。再次感谢。 – cbros2008 2011-06-10 09:50:34

相关问题