如何在 PostgreSQL 中获取表的每一天的第一个日期并将其转换为 JSON

Posted

技术标签:

【中文标题】如何在 PostgreSQL 中获取表的每一天的第一个日期并将其转换为 JSON【英文标题】:How to get the first date of each day of a table in PostgreSQL and convert it into a JSON 【发布时间】:2019-08-27 20:31:20 【问题描述】:

正如问题所说,我想获得从具有“N”个项目和列的表的每个日期获得的第一个值,但有一个 timestamp field without time zone 和我想在 JSON 中连接的那些值在一个数组中。

查询接收到日期间隔类型Datestart dateend date

例如,我有一张桌子

ID | fecha               
1   "2019-05-18 13:55:54"
2   "2019-05-18 13:57:22"
3   "2019-05-18 13:57:37"
4   "2019-05-18 13:58:07"
5   "2019-05-18 13:58:37"
6   "2019-05-18 13:58:48"
7   "2019-05-19 13:55:54"
8   "2019-05-19 13:57:22"
9   "2019-05-19 13:57:37"
10  "2019-05-20 13:58:07"
11  "2019-05-20 13:58:37"
12  "2019-05-20 13:58:48"

如果我通过例如start_day : '2019-05-18'end_date: '2019-05-20',我想得到这个

预期结果

["id" : 1, "fecha" :"2019-05-18 13:55:54","id" : 7, "fecha" :"2019-05-19 13:55:54","id" : 10, "fecha" :"2019-05-20 13:58:48"]

我将使用json_aggjson_build_object 来获取数组中的JSON,但我不知道如何在简单的查询中获取每天的第一个日期。如果你能帮助我,我将不胜感激

【问题讨论】:

【参考方案1】:

您可以使用distinct on 获取每天的第一个条目,同时仍保持完整的时间戳

select json_agg(d) 
FROM (SELECT distinct on (fecha::date)
      json_build_object('id', id, 'fecha', fecha) as d
      FROM test
      ORDER BY fecha::date, fecha)
 sub;
                                                                 json_agg
------------------------------------------------------------------------------------------------------------------------------------------
 ["id" : 1, "fecha" : "2019-05-18T13:55:54", "id" : 7, "fecha" : "2019-05-19T13:55:54", "id" : 10, "fecha" : "2019-05-20T13:58:07"]
(1 row)

【讨论】:

【参考方案2】:

只需将其转换为日期并对其进行分组,选择每个日期的最小时间戳:

SELECT fecha::date, min(fecha)
FROM table
GROUP BY fecha::date

投射到日期有效地剥夺了时间,给你“每天”的要求,然后那一天的第一个时间戳由分钟给出。您的 id 似乎是连续的;您也可以将其最小化,因为最小值在一天也将是最小时间戳。如果有任何机会 id 不是连续的,请发表评论,我会给出进一步的建议

【讨论】:

以上是关于如何在 PostgreSQL 中获取表的每一天的第一个日期并将其转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何在一周中的每一天的每一天中创建空条目

mysql数据库中sql语句取一段时间的每一天的最后一条数据?sql语句怎么写

PostgreSQL:如何在给定日期范围内的每一天为每个帐户选择最后余额? [复制]

在几天的持续时间内,选择表格中记录的每一天的最后一个条目

如何找到从 10 月 1 日至今的每一天的价格总和

mysql怎么得到时间段每一天,不用表,就是得到一个时间段的每一天的日期