我提出了一个查询,其中我想从具有两个日期字段的表中仅提取最早的日期。两个日期字段都可能为空。但是,如果至少有一个字段不为null,我只想拉取值。此外,如果第一个日期字段不为null,那么我想要该值。换句话说,我更喜欢第一个日期字段。
这是我提出的问题,但我并不觉得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(不是我的选择)。但只是这样说,因为旧版本可能不支持某些新的查询语法。
提前感谢任何纠正或改善此事的输入!
答案 0 :(得分: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