2013-07-06 41 views
0

我需要从一个表,其中有2个主键MACID和设备ID的数据分组。SQL查询返回由主键

我需要这2个主键设置为组记录的记录,但我无法弄清楚如何做到这一点。

这是我现在有:

SELECT * FROM data WHERE stamp > 1373040000000 AND stamp < 1373126400000 ORDER BY macid ASC,deviceid ASC,stamp ASC 

[ 
{"deviceid":1,"temp":-19.81,"macid":"19:5d:ee3e00","stamp":1373054400000}, 
{"deviceid":1,"temp":-20.31,"macid":"19:5d:ee3e00","stamp":1373065200000}, 
{"deviceid":3,"temp":28.87,"macid":"19:5d:ee3e00","stamp":1373054400000}, 
{"deviceid":3,"temp":28.87,"macid":"19:5d:ee3e00","stamp":1373065200000} 
] 

这是我业务承包商

[ 
[{"deviceid":1,"temp":-19.81,"macid":"19:5d:ee3e00","stamp":1373054400000}, 
{"deviceid":1,"temp":-20.31,"macid":"19:5d:ee3e00","stamp":1373065200000}] 

[{"deviceid":3,"temp":28.87,"macid":"19:5d:ee3e00","stamp":1373054400000}, 
{"deviceid":3,"temp":28.87,"macid":"19:5d:ee3e00","stamp":1373065200000}] 
] 

我都试过,但它只是返回相同的结果:

SELECT * FROM data WHERE stamp > 1373040000000 AND stamp < 1373126400000 GROUP BY macid, deviceid, stamp ORDER BY macid ASC,deviceid ASC,stamp ASC 

这可能吗?

+0

你通过Python这样做呢?你是否需要在Python端列表中完成分组? – iruvar

+0

嗨,我为这个应用程序使用JavaScript。我宁愿让记录集返回2个单独的记录,以便js cn然后循环遍历每个mac /设备组。 – crankshaft

回答

0

事实上,你不能让SQL服务器回报,你行的多个组。 GROUP BY语句用于按某些列对行进行分组并计算其他列的聚合函数(行数,总和,平均值等)。结果每个组只返回一行。

所以,我认为我们需要的方式在这里与在客户端分组。你可以这样做如下:

var devices=[ 
{"deviceid":1,"temp":-19.81,"macid":"19:5d:ee3e00","stamp":1373054400000}, 
{"deviceid":1,"temp":-20.31,"macid":"19:5d:ee3e00","stamp":1373065200000}, 
{"deviceid":3,"temp":28.87,"macid":"19:5d:ee3e00","stamp":1373054400000}, 
{"deviceid":3,"temp":28.87,"macid":"19:5d:ee3e00","stamp":1373065200000} 
]; 

var devicesGrouped = {}; 
for (i=0; i < devices.length; i++) 
{ 
    key = [devices[i].deviceid, devices[i].macid]; 
    if (!(key in devicesGrouped)) 
     devicesGrouped[key] = []; 

    devicesGrouped[key].push(devices[i]); 
} 

结果将是devicesGrouped哈希与作为关键[deviceid,macid]

{"1,19:5d:ee3e00": 
    [{"deviceid":1,"temp":-19.81,"macid":"19:5d:ee3e00","stamp":1373054400000}, 
     {"deviceid":1,"temp":-20.31,"macid":"19:5d:ee3e00","stamp":1373065200000}], 

"3,19:5d:ee3e00": 
    [{"deviceid":3,"temp":28.87,"macid":"19:5d:ee3e00","stamp":1373054400000}, 
     {"deviceid":3,"temp":28.87,"macid":"19:5d:ee3e00","stamp":1373065200000}] 
} 
+0

谢谢,这是一个很好的解决方案,比我想出的要好得多。 – crankshaft