2011-06-09 63 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

相關問題