我有一张表“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/