我有下表
id date time_stamp licenseid storeid deviceid value
1 2015-06-12 17:36:15 lic0001 1 0add 52
2 2015-06-12 17:36:15 lic0002 1 0add 54
3 2015-06-12 17:36:15 lic0003 1 0add 53
4 2015-06-12 17:36:21 lic0001 1 0add 54
5 2015-06-12 17:36:21 lic0002 1 0add 59
6 2015-06-12 17:36:21 lic0003 1 0add 62
7 2015-06-12 17:36:21 lic0004 1 0add 55
8 2015-06-12 17:36:15 lic0001 1 0bdd 53
9 2015-06-12 17:36:15 lic0002 1 0bdd 52
10 2015-06-12 17:36:15 lic0003 1 0bdd 52
我需要基于它所看到的时间戳数量来计算deviceid。所以输出类似于:0add在2个时间戳中看到因此计数为2而0bdd在一个时间戳中看到因此0bdd具有计数为1.每个时间戳对应于设备的许可证数量不计入计数。
date deviceid count
2015-06-12 0add 2
2015-06-12 0bdd 1
我正在尝试使用下面的查询,但无法验证它是否有效,因为查询已经执行了相当长的一段时间而且没有显示任何结果:
select date, deviceid, count(deviceid) from my_table group by deviceid, time_stamp
请注意,我运行此查询的行数为2,000,000
编辑:标有time_stamp
的列是TIME
类型。
答案 0 :(得分:5)
我认为你需要考虑以下几点:
对第一个的修复是自解释的,对于第二个,您可以将聚合更改为COUNT(DISTINCT timestamp)
。试试这个问题:
SELECT device_id, date, COUNT(DISTINCT timestamp) AS numRows
FROM myTable
GROUP BY device_id, date;
以下是使用示例数据的SQL Fiddle示例。还值得注意的是,如果此查询对您来说仍然很慢,那么在device_id和date列上放置索引可以帮助此查询更快地运行。有关此问题的更多讨论,请参阅评论。
答案 1 :(得分:0)
select date, deviceid, count(deviceid) from my_table group by date,deviceid
你有时间戳而不是日期。查询确实应该没有返回任何内容,因为它是一个无效的组。