SQL根据不同的情况从表中选择不同的记录

时间:2018-07-26 06:43:15

标签: sql database

一个表格包含贸易交易数据。一个交易(由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?

enter image description here

2 个答案:

答案 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(尽管是标准的),但是所有数据库都应具有相似的功能。