具有相同日期的记录数的列

时间:2017-05-20 06:20:02

标签: sql postgresql

我有一个类似于下面的数据集:

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数据库只能读取访问权限。

2 个答案:

答案 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