2

我正在做一些事情,我需要能够从两行中选择多列的 MAX,它们在另一个表上的 ID 中匹配,由FROM_UNIXTIME(date, "%m%").

SQLFiddle 示例

我在上面整理了一个 SQL Fiddle 示例。

在示例中,我有两个表,Pairs并且Data. 这些对由id(非主键)连接。所以,TestDeviceA两者TestDeviceB都有一个id1;TestDeviceC两者TestDeviceD都有一个id2。

对于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

我觉得查询中可能缺少一些东西。

什么是更有效和更准确的方法?

4

1 回答 1

0

我遇到的问题是,我的data2data3列是binary(16)(它们存储来自接口统计的字节)。

我不得不补充:

MAX(cast(s.data2 as unsigned integer)) as data2
于 2013-01-10T16:10:12.293 回答