gpt4 book ai didi

sql - 左连接产生内连接结果 - PostgreSQL

转载 作者:行者123 更新时间:2023-11-29 13:34:36 25 4
gpt4 key购买 nike

我希望从偶尔发生的事件日志中获取值,并将这些值扩展到事件之间的所有日期。例如:

一个完整的系列可能看起来像...

2013-01-01
2013-01-02
2013-01-03
2013-01-04
2013-01-05

但是事件日志看起来像...

2013-01-01 | value_1
2013-01-04 | value_2

期望的最终结果如下...

2013-01-01 | value 1
2013-01-02 | value 1
2013-01-03 | value 1
2013-01-04 | value 2
2013-01-05 | value 2

作为解决方案,我尝试生成一个完整的日期系列,将选择性事件日志日期加入到该完整系列中,然后用所需的值填充 NULL 值,但我遇到了一个问题我的左连接产生内连接结果。

select 
days.date,
e.value
from
--Generate table for dates
(select
row_number() over (),
generate_series::date as date
from
generate_series('2009-01-01',current_date + interval '100 days',interval '1 day')) days
--Combine actual change log
left join
(select
value,
event_date
from event_table
where type = 'desired_type') e
on days.date = e.event_date

我的结果集不是包含完整日期的 1669 行,而是只有几个 e.value,而是每个非 NULL days.date、e.value 组合的一行。在视觉上,而不是...

2009-01-01 | value 1
2009-01-02 | NULL
2009-01-03 | NULL
2009-01-04 | value 2
2009-01-05 | NULL
...

...我正在...

2009-01-01 | value 1
2009-01-04 | value 2
...

从几天前开始,我希望这是一个内连接,而不是左连接。

最佳答案

LEFT JOIN 应该可以正常工作。

您可以大大简化整个查询:

SELECT d.day, e.value
FROM (
SELECT rn, '2009-01-01'::date + rn AS day
FROM generate_series(0, (now()::date - '2009-01-01'::date) + 100) AS g(rn)
) d
LEFT JOIN event_table e ON e.event_date = d.day AND e.type = 'desired_type'

然而,就在几天前,有人问了一个非常相似的问题。它有许多非常好的答案(包括我可能会添加的答案)。您会在那里找到针对您的问题的完整解决方案:
How do I write a join with this unusual matching criteria?

关于sql - 左连接产生内连接结果 - PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16094611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com