sql - 填写空日期
问题描述
此查询返回特定日期范围之间按天创建的警报数。
SELECT CAST(created_at AS DATE) AS date, SUM(1) AS count
FROM ew_alarms
LEFT JOIN site ON site.id = ew_alarms.site_id
AND ew_alarms.created_at BETWEEN '12/22/2020' AND '01/22/2021' AND (CAST(EXTRACT(HOUR FROM ew_alarms.created_at) AS INT) BETWEEN 0 AND 23.99)
GROUP BY CAST(created_at AS DATE)
ORDER BY date DESC
结果:截图
填写缺失日期(1/16、1/17、1/18 等)的最佳方法是什么?由于在那些日子里没有产生警报,这些结果甩开了我最终试图达到的每日平均值。
会是generate_series
查询吗?
解决方案
是的,使用generate_series()
. 我会建议:
SELECT gs.date, COUNT(s.site_id) AS count
FROM GENERATE_SERIES('2020-12-22'::date, '2021-01-22'::date, INTERVAL '1 DAY') gs(dte) LEFT JOIN
ew_alarms a
ON ew.created_at >= gs.dte AND
ew.created_at < gs.dte + INTERVAL '1 DAY' LEFT JOIN
site s
ON s.id = a.site_id
GROUP BY gs.dte
ORDER BY date DESC;
我不知道小时比较应该做什么。小时总是在 0 到 23 之间,所以我删除了那个逻辑。
注意:大概,您想从site
或中计算一些东西ew_alarms
。这是 s 所期望的,LEFT JOIN
因此0
可以返回。
推荐阅读
- python - 即使在 dockerfile /requirements.txt 中添加 numpy 后,在 docker 容器中使用 numpy 运行 python 代码时出现“模块未找到错误”
- php - Mysql查询不起作用,显示一个空字段
- android - 如何设置工件库根名称
- lotus-notes - IBM Domino - 删除共享视图并将 NSF 应用程序转换为 NTF(模板)
- node.js - 是否可以在未经用户授权的情况下获取公共的 Spotify 播放列表?
- karate - 如何使用空手道框架用 def 值替换键
- mysql - mysql查询在一行中打印不同行的数据
- firebase - 如何将 JSON 导入 Cloud Firestore
- powerbi - Power Bi DAX:累积和未显示正确数据
- node.js - 可以使用 Heroku 上的流下载 TXT 文件,但无法下载 PDF 文件 - NodeJS、Heroku