多个日期字段的 PostgreSQL 案例语句



我提出了一个查询,其中我只想从具有两个日期字段的表中提取最早的日期。两个日期字段都可能为空。但是,我只想在至少一个字段不为空时才拉取值。另外,如果第一个日期字段不为空,那么我想要该值。换句话说,我更喜欢第一个日期字段。

这是我提出的,但我觉得这不是 100% 正确的。而且,我也在想有一种更好的方法来剥猫皮。

Select
o.order_num,
Case
    when ro.pay1_date is not null then ro.pay1_date 
    when ro.pay2_date is not null then ro.pay2_date
End as funding_date
From orders o
left join recon_order ro on(ro.order_id = o.order_id)
Where (ro.pay1_date is not null or ro.pay2_date is not null) 
Order by funding_date desc
Limit 500

我第一次在没有 Where 子句的情况下运行此查询,但这只返回了 500 个 Null 值,我从未完全理解。

作为旁注,我正在使用旧版本的PostgreSQL 8.1(不是我的选择)。但只是这样说,因为旧版本可能不支持某些新的查询语法。

提前感谢您提供任何纠正或改进此问题的输入!

您可以使用

least来获取 2 个日期中最少的日期。当它们都null时,它返回null。您可以稍后筛选null行。

SELECT *
FROM
  (SELECT o.order_num,
          least(ro.pay1_date,ro.pay2_date) as funding_date
   FROM orders o
   LEFT JOIN recon_order ro ON ro.order_id = o.order_id) x
WHERE funding_date IS NOT NULL

最新更新