我有一个包含一些动物目击数据的表,其中每个目击条目都有一个区域字段。每个区域每天可以有 0 到多个条目。
我需要创建一个查询,其中每个区域每天有一行(即使没有目击事件,也全天)。所以我想用generate_series命令加入表,如下所示:
WITH dates AS (
SELECT
MAX(DATE(sighting_time)) AS max_date,
MIN(DATE(sighting_time)) AS min_date
FROM sightings
)
SELECT
generate_series(dates.min_date::date, dates.max_date::date, '1 day') as gen_date
FROM dates
并与原始表进行左连接。这确实填补了两个区域都没有条目的空白,但我需要它来填充当天没有条目的每个区域的日期,基本上该区域的空行甚至可能包含区域名称还在那儿。
我还可以创建单独的查询,显式过滤每个区域,然后合并它们,但我不想对区域进行硬编码,即使我们添加更多区域,这也应该有效。
任何帮助表示赞赏,谢谢!
我不完全确定您希望问题的输出是什么样的。我对 postgresql (和 db fiddle)还很陌生,但我想在这里学习,所以这就是我根据你的问题想到的。
如果你想查看的话,我这里有一个数据库小提琴。
但这会为每个日期和区域提供一行,无论特定日期是否有该区域的数据,我认为这就是您想要的?