一个表格包含贸易交易数据。一个交易(由deal_no标识)在表中可能有多个记录。但是,我只选择一个记录。选择一条记录的条件取决于不同的情况。
从附图中,我需要选择具有最新step_release_date的记录,该记录是根据以下条件计算的:
CASE
WHEN (DEALSTP.IXSTP_OFFERING_DATE > 0 ) THEN (DEALSTP.IXSTP_OFFERING_DATE)
WHEN (DEALSTP.IXSTP_REL_DATE_A > 0 ) THEN (DEALSTP.IXSTP_REL_DATE_A)
ELSE (DEALSTP.IXSTP_REL_DATE_B)
END ) as Step_release_date
如何从此表中选择最新的step_release_date?
答案 0 :(得分:0)
您可以在此处尝试使用GREATEST
:
SELECT
GREATEST(IXSTP_OFFERING_DATE, IXSTP_REL_DATE_A, IXSTP_REL_DATE_B) AS Step_release_date
FROM DEALSTP;
如果您想使用CASE
表达式,也可以完成,但需要做更多的工作:
SELECT
CASE WHEN IXSTP_OFFERING_DATE > IXSTP_REL_DATE_A AND
IXSTP_OFFERING_DATE > IXSTP_REL_DATE_B
THEN IXSTP_OFFERING_DATE
ELSE CASE WHEN IXSTP_REL_DATE_A > IXSTP_REL_DATE_B
THEN IXSTP_REL_DATE_A
ELSE IXSTP_REL_DATE_B END AS Step_release_date
FROM DEALSTP;
答案 1 :(得分:0)
您可以使用order by
和适当的limit
功能。看起来像:
select t.*,
(CASE WHEN DEALSTP.IXSTP_OFFERING_DATE > 0
THEN DEALSTP.IXSTP_OFFERING_DATE
WHEN DEALSTP.IXSTP_REL_DATE_A > 0
THEN DEALSTP.IXSTP_REL_DATE_A
ELSE DEALSTP.IXSTP_REL_DATE_B)
END) as Step_release_date
from t
order by Step_release_date desc
fetch first 1 row only;
请注意,并非所有数据库都支持fetch first
(尽管是标准的),但是所有数据库都应具有相似的功能。