sql - 如何在 Postgres 中指定的时间内查看每小时结果
问题描述
当指定以下条件时,我想创建一个返回时区列表的查询。
select day, hour
...
where
target_datetime between '2021-08-01 00:00:00' and '2021-08-01 23:59:59'
[
{ 'day': '2021-08-01', 'hour': 0 },
{ 'day': '2021-08-01', 'hour': 1 },
{ 'day': '2021-08-01', 'hour': 2 },
...
{ 'day': '2021-08-01', 'hour': 23 }
]
我怎样才能得到这个?
解决方案
用于generate_series
从时间间隔创建记录,并jsonb_build_objebt
用于jsonb_agg
创建您的 json 文档:
SELECT
jsonb_agg(
jsonb_build_object(
'day',tm::date,
'hour',EXTRACT(HOUR FROM tm)))
FROM generate_series('2021-08-01 00:00:00'::timestamp,
'2021-08-01 23:59:59'::timestamp,
interval '1 hour') j (tm);
演示:db<>fiddle
推荐阅读
- omnet++ - 在 OMNeT++ 仿真中使用使用 Matlab Compiler SDK 创建的共享库
- mysql - 使用条件创建触发器并替换
- r - 来自 SQL 奇怪行为的 R 表
- sql - 使用 SQL 代码向 athena 中的现有表添加新的分区方案
- python - 在 django 的视图中使用查询没有从 mysql 获取结果
- python-3.x - How to get the first column (index) in the dictionary output with Pandas?
- python - plt.imshow() 显示标准化图像,即使按 *= 255 缩放
- mysql - 通过flutter应用直接连接MySQL
- c# - xaml UI 未以 xamarin 形式更新
- python - python 验证 AWS S3 标准 ACL / 获取有效标准 ACL 列表