我有一张这样的表:
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做点什么,但我没有很好的结果。
有人可以帮助我吗?
答案 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;
希望这有帮助。