我正在做一些事情,我需要能够从两行中选择多列的最大值,它们在另一个表的 ID 中匹配,按 FROM_UNIXTIME(date, "%m%") 分组
。
我在上面整理了一个 SQL Fiddle 示例。
在示例中,我有两个表,Pairs
和 Data
。这些对由 id
(非主键)连接。因此,TestDeviceA
和 TestDeviceB
的 id
均为 1; TestDeviceC
和 TestDeviceD
的 id
均为 2。
对于 Data
表中的每个不同日期,我需要提取两个设备之间 data1
列的最大值,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
我觉得查询中可能缺少某些内容。
什么是更有效、更准确的方法?
最佳答案
我遇到的问题是,我的 data2
和 data3
列是 binary(16)
(它们存储来自接口(interface)统计信息的字节)。
我必须补充:
MAX(cast(s.data2 as unsigned integer)) as data2
关于php - 由另一个表约束的两行的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14241166/