我刚接触PostgreSQL(具体来说,我使用Timescale数据库),关于时间窗口我有一个问题。
数据:
date |customerid|names
2014-01-01|1 |Andrew
2014-01-02|2 |Pete
2014-01-03|2 |Andrew
2014-01-04|2 |Steve
2014-01-05|2 |Stef
2014-01-06|3 |Stef
2014-01-07|1 |Jason
2014-01-08|1 |Jason
问题是:回溯x天(从每一行的角度看),有多少个不同的名称共享相同的ID?
对于x = 2天,结果应该如下:
date |customerid|names |count
2014-01-01|1 |Andrew |1
2014-01-02|2 |Pete |1
2014-01-03|2 |Andrew |2
2014-01-04|2 |Steve |3
2014-01-05|2 |Stef |3
2014-01-06|3 |Stef |1
2014-01-07|1 |Jason |1
2014-01-08|1 |Jason |1
在不使用循环遍历每一行的情况下,PostgreSQL是否可以实现这个功能?
额外信息:实际数据的时间间隔不是等距的。
非常感谢!
COUNT()
在窗口函数中实现了,但不包括COUNT(DISTINCT <column>)
。Lateral查询是解决方案。 - The Impaler