我有一个像这样的结构的PostgreSQL表
id elementid timestamp providerid x y
1 1 2014-10-01T00:00:00Z 12 12 18
2 1 2014-10-01T00:10:00Z 12 14 18
3 1 2014-10-01T00:15:00Z 12 16 20
4 2 2014-10-01T00:50:00Z 12 12 18
5 2 2014-10-01T01:10:00Z 12 14 18
6 2 2014-10-01T01:15:00Z 12 16 20
7 7 2014-10-01T00:00:00Z 14 12 18
8 7 2014-10-01T00:10:00Z 14 14 18
9 7 2014-10-01T00:15:00Z 14 16 20
我想计算每小时和位置属于同一elementid
的不同providerid
的数量。
一个例子
在 00:00和01:00 之间,在 xmin = 12,ymin = 18,xmax = 16,ymax = 20 定义的框中,有< strong> 2个元素属于 providerid 12 (4个第一个记录:元素与elementid = 1,元素与elementid = 2)。因此,对于providerid = 12 ,计数每小时 2个元素。
正如您所看到的,我真的在处理移动元素。因此,在该时间范围内(1小时),我将元素1放在3个不同的位置,元素2放在一个位置。因此,共有2个元素,属于同一个提供者(providerid = 12)。
然后,我的结果集应如下所示:
providerid start_time end_time num_elements
12 2014-10-01T00:00:00Z 2014-10-01T01:00:00Z 2
我希望每个提供商的相同。
我猜这个回复类似于this one,this one或this one,但仍然没有找到解决方案。任何帮助都非常感谢。
非常感谢提前!
答案 0 :(得分:1)
您是否尝试过COUNT( DISTINCT ... )
?
SELECT t1."providerid",
s.start_time,
s.end_time,
COUNT( DISTINCT "elementid" ) As num_elements
FROM table1 t1
JOIN start_end_time s
ON t1."timestamp" BETWEEN s.start_time AND s.end_time
GROUP BY
t1."providerid",
s.start_time,
s.end_time