sql - Postgres - 将包含特定日期数据的表连接到包含范围内所有日期的表

标签 sql postgresql date join range

我有一张表“dailymetrics”,其中包含特定日期的数据。我想将它与一个范围内所有日期的表格连接起来,这样我就可以在一个日期范围内取平均值。我正在尝试生成我想要的日期范围,然后与表“dailymetrics”进行左外连接。但是,输出仅包含“dailymetrics”表中已存在的日期。如何让输出表包含范围内的所有日期?

查询

SELECT day::date, dm.person_id, dm.latency
FROM generate_series('2015-08-01', '2015-08-10', INTERVAL '1 day') day
LEFT OUTER JOIN sleeptracking_dailymetrics as dm
ON dm.date=day
ORDER BY dm.person_id, day DESC;

当前输出示例:

   day     | person_id |    latency    
------------+-----------+---------------
2015-08-08 |       847 |            56
2015-08-06 |       847 |            60
2015-08-05 |       847 |            88
2015-08-04 |       847 |            46
2015-08-03 |       847 |            24
2015-08-01 |       847 |             0

2015-08-07 和 2015-08-02 的行不存在。

最佳答案

我猜您的数据中有不止一个人,而且您过度简化了查询。您需要在日期和人员之间进行交叉连接,然后进行左连接:

SELECT day::date, p.person_id, dm.latency
FROM (select distinct person_id from sleeptracking_dailymetrics) p cross join
     generate_series('2015-08-01', '2015-08-10', INTERVAL '1 day') day left join
     sleeptracking_dailymetrics dm
     ON dm.date = day and dm.person_id = p.person_id
ORDER BY p.person_id, day DESC;

交叉连接 生成所有行。 left join 然后引入您想要的数据。

关于sql - Postgres - 将包含特定日期数据的表连接到包含范围内所有日期的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31928870/

相关文章:

java - 带引擎的 Sql 解析器

python - Peewee ORM - 即使计数为 0,也注释多对多关系的计数

mysql - 删除带有外键的行( Entity Framework )

sql - MySQL 或 Rails 中在特定日期范围内每天获取 AVG 的最佳方法

postgresql - 如何将 JsonNode 参数(micronaut + kotlin)保存为 postgres 数据库中的 jsonb

ruby-on-rails - psql:无法连接到服务器:连接被拒绝服务器是否在主机 "localhost"(::1) 上运行并在端口 5432 上接受 TCP/IP 连接?

python - 当使用 nginx 作为 gunicorn 的反向代理时,Django 应用程序中的空 REMOTE_ADDR 值

javascript - Date.parse() 与 moment().unix()

Javascript 新的 date() 转换

Javascript 使用整月的日期差异