2013-01-09 48 views
2

我的東西,我需要能夠從兩行,在那裏他們的ID匹配另一個表,由FROM_UNIXTIME(date, "%m%")分組選擇多列的最大工作約束兩排。MAX由另一臺

SQLFiddle Example

我放在一起的SQL小提琴上面的例子。

在這個例子中我有兩個表,PairsData。在對由一個id(非主鍵)接合。所以,TestDeviceATestDeviceB都有1的id; TestDeviceCTestDeviceD都具有對於在Data表中的每個不同日期的2.

一個id,我需要拉兩個設備之間的data1列的max,則data2列的最大值,與同爲data3

例子:

date | device  | data1 | data2 | data3 
------------------------------------------------- 
1234 TestDeviceA  222  234  555 
1234 TestDeviceB  292  204  155 

期望的結果將是沿着線的東西:

1234 TestDeviceA/TestDeviceB 292 234 555 

實例查詢:

SELECT FROM_UNIXTIME(date, "%m"), FROM_UNIXTIME(date, "%d"), p.id as PairID, GROUP_CONCAT(device SEPERATOR '/'), MAX(data1), MAX(data2), MAX(data3) 
FROM Data LEFT JOIN Pairs p on p.devicename=device 
GROUP BY p.id,date 

我覺得有可能是一些我在想念在查詢中。

什麼是更有效和準確的方法來處理它?

+1

你的方法似乎就好了。這可能是在MySQL中最好的方式 - 正確使用聚合MAX()和GROUP BY。 –

+0

感謝您的迴應。出於某種原因,每隔一段時間的MAX()似乎並沒有被正確地聚集。現在調試它。 –

回答

0

我碰到的問題是,我的data2data3列是binary(16)(它們存儲來自接口統計的字節)。

我不得不添加:

MAX(cast(s.data2 as unsigned integer)) as data2