我有一个类似于下面的数据集:
ID | date_time | val1 | val2
-- | ------------------- | ---- | ----
1 | 2017-05-01 14:33:52 | 15 | 8
2 | 2017-05-01 14:45:18 | 13 | 8
3 | 2017-05-01 15:03:36 | 17 | 9
4 | 2017-05-02 08:05:34 | 9 | -2
5 | 2017-05-02 08:06:01 | 5 | -1
6 | 2017-05-03 22:54:33 | 21 | 15
我需要找到一种方法来只选择具有超过某个值的时间分辨率的数据,这意味着给定日期的观察数量高于该值。我正在努力解决这个问题。理想情况下,我的查询会产生一组带有新列 n_obs_day 的结果,因此它会计算具有相似日期的记录(例如,2017-05-01;确切时间无关紧要)
ID | date_time | val1 | val2 | n_obs_day
-- | ------------------- | ---- | ---- | ---------
1 | 2017-05-01 14:33:52 | 15 | 8 | 3
2 | 2017-05-01 14:45:18 | 13 | 8 | 3
3 | 2017-05-01 15:03:36 | 17 | 9 | 3
4 | 2017-05-02 08:05:34 | 9 | -2 | 2
5 | 2017-05-02 08:06:01 | 5 | -1 | 2
6 | 2017-05-03 22:54:33 | 21 | 15 | 1
我应该怎么做?我查询PostgreSQL数据库只能读取访问权限。
答案 0 :(得分:0)
您需要窗口功能:
SELECT *, count(*) OVER (PARTITION BY date_time)
FROM dataset
https://www.postgresql.org/docs/current/static/tutorial-window.html https://www.postgresql.org/docs/current/static/functions-window.html
答案 1 :(得分:0)
您可以通过将时间戳转换为日期来使用窗口函数来获取
下面的正确分区select *, count(id) over(partition by date_time::date) as n_obs_day from yourdate