【问题标题】:PostgreSQL: counting elements per hour and positionPostgreSQL:每小时和位置计数元素
【发布时间】:2014-11-13 19:01:28
【问题描述】:

我有一个类似这样结构的 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

我想计算每小时和位置属于同一providerid 的不同elementid 的数量

一个例子

00:00到01:00之间,在xmin=12, ymin=18, xmax=16, ymax=20定义的框内,有2 个元素 属于 providerid 12(4 个第一条记录:elementid = 1 的元素和 elementid = 2 的元素)。因此,计数是 每小时 2 个元素,providerid = 12

如您所见,我真的在处理移动元素。因此,在那个时间范围内(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 onethis onethis one,但仍然没有找到解决方案。非常感谢任何帮助。

非常感谢!

【问题讨论】:

    标签: sql postgresql aggregate-functions


    【解决方案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
    

    演示:http://sqlfiddle.com/#!12/b55a8/2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-04
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 2015-07-29
      • 2021-07-23
      相关资源
      最近更新 更多