【问题标题】:SQL to select different records from a table based on different casesSQL根据不同情况从表中选择不同的记录
【发布时间】:2018-07-26 06:43:14
【问题描述】:

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

【问题讨论】:

  • 我删除了不兼容的数据库标签。您应该使用您真正使用的数据库进行标记。如果你给你的问题适当的标签,那么你更有可能得到有用的答案。

标签: sql database


【解决方案1】:

您可以在这里尝试使用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;

【讨论】:

  • 需要考虑我得到 IXSTP_OFFERING_DATE 大于 0 的记录。如果没有这样的记录,那么我需要检查第二列,即 IXSTP_REL_DATE_A 是否有任何值大于 0 的记录。如果这也没有产生任何值,那么我需要检查第三列,即 IXSTP_REL_DATE_B。如果在这些列中的任何一列中,我得到多个记录,我需要选择具有最新日期值的记录
  • @user3532090 但我认为在所有情况下,采取最大的列都支持你的逻辑。如果只有一列不为零,而另外两列为零,那么您仍然想要最大的。
  • 使用最大可以给我第三列的值作为记录。虽然要求是首先从第一列中选​​择。只有当我没有从该列中获得值时,我才应该检查下一列
  • 你真的尝试过我对你的数据的查询吗?
【解决方案2】:

您可以使用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(虽然是标准),但所有数据库都应该具有类似的功能。

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2011-10-31
    • 2019-03-22
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多