如何在没有开始和结束日期的CASE中使用BETWEEN运算符



有开始和结束日期:

oa.entity_created            oa.lagg
id 1|  start |2022-07-20     end |2022-08-15
id 2|  start |2022-06-15     end |2022-08-09
id 3|  start |2022-08-12     end |blank

如何在没有开始日期和结束日期的情况下在这些日期之间计数,就像这个

oa.entity_created            oa.lagg
id 1| start |2022-07-21     end |2022-08-14
id 2| start |2022-06-16     end |2022-08-08
id 3| start |2022-08-13     end |blank

如果空白计数直到current_date

count(case when (oa.entity_created < cred.entity_created and oa.lagg > cred.entity_created) then 1 end) 

不能正常工作

要正确解释谓词中的空白值(我假设这是一个null值(,请将COALESCE与默认值一起使用,在您的情况下是CURRENT_DATE

coalesce(oa.lagg,CURRENT_DATE)

因此,例如,要从表中获取2022-08-14的日期匹配的所有行,请使用以下谓词(请参阅WHERE子句,其余为示例数据(。

select * from (
values
(date'2022-07-20',date'2022-08-15'),
(date'2022-06-15',date'2022-08-09'),
(date'2022-08-12',null)
) oa(entity_created,lagg)
where oa.entity_created < DATE'2022-08-14' and coalesce(oa.lagg,CURRENT_DATE) >  DATE'2022-08-14'
entity_created|lagg      |
--------------+----------+
2022-07-20|2022-08-15|
2022-08-12|          |

相应地调整CASE语句中的这个谓词。

最新更新