使用SQL组织日期/时间表 - Postgres

时间:2016-07-19 16:21:13

标签: sql postgresql

我有一张这样的表:

id  |   date   |   date_time
------------------------------------
1 | 2016-07-01 | 2016-07-01 06:00:00  
2 | 2016-07-01 | 2016-07-01 06:02:00  
3 | 2016-07-01 | 2016-07-01 06:01:00  
1 | 2016-07-01 | 2016-07-01 16:25:00  
2 | 2016-07-01 | 2016-07-01 18:04:00  
3 | 2016-07-01 | 2016-07-01 12:06:00
3 | 2016-07-01 | 2016-07-01 17:57:00

我想用sql做这样的事情:

id | date | date_time1 | date_time2 | date_time3
----------------------------------------------------------
1 | 2016-07-01 | 2016-07-01 06:00:00 | 2016-07-01 16:25:00   
2 | 2016-07-01 | 2016-07-01 06:02:00 | 2016-07-01 18:04:00    
3 | 2016-07-01 | 2016-07-01 06:01:00 | 2016-07-01 17:57:00 | 2016-07-01 17:57:00 

该表每天可以有两次,三次或四次。我试图用postgres做点什么,但我没有很好的结果。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

获取您正在寻找的信息的最快方法是使用PostgreSQL的内置阵列和聚合功能。例如,查询:

SELECT id, the_date, ARRAY_AGG(the_timestamp ORDER BY the_timestamp) AS date_time FROM dtpair GROUP BY id, the_date;

生成的东西非常接近您指定的内容(并且可能已经解决了您的问题)并且对每个日期的时间戳数量没有任何限制。

如果您需要上面指定的确切格式,您可以使用相同的方法,但使用嵌套查询进一步复杂化以使其如此:

SELECT id, the_date, date_time[1] AS date_time1, date_time[2] AS date_time2, date_time[3] AS date_time3 FROM (SELECT id, the_date, ARRAY_AGG(the_timestamp ORDER BY the_timestamp) AS date_time FROM dtpair GROUP BY id, the_date) AS arrayquery;

希望这有帮助。