繁体   English   中英

根据多个状态,在 sql 中选择特定日期列

[英]Based on multiple status, pick specific date column in sql

ID  Status      OfferID 
1   Processed   456
1   Processed   123
2   Pending     999
3   Processed   678
3   Pending     789

根据身份证,

  1. 如果 ID=1 并且具有相同的状态,则 output 列(CTSDate)应该是 offerID 的最大值
  2. 如果 ID=2 并且只有一个状态,那么 output 是与之关联的 offerID
  3. 如果 ID=3 并且具有不同的状态,则选择已处理状态相关的 OfferID

上述场景需要适用于一整套数据。

请帮忙。

我们可以在此处使用具有适当排序级别的ROW_NUMBER()

WITH cte AS (
    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY ID
                                   ORDER BY Status DESC, OfferID DESC) rn
    FROM yourTable t
)

SELECT ID, Status, OfferID
FROM cte
WHERE rn = 1
ORDER BY ID;

我将分别计算具有已处理状态和未处理状态的 ID 的最大报价 ID,然后将它们一起计算为 append。

with tmp1 AS (
  /* cases with processed status */
  SELECT
    ID, max(OfferID) AS OfferID
  FROM 
    tbl
  WHERE status = 'Processed'
  GROUP BY ID
),
tmp2 AS (
  /* cases with no processed status */
  SELECT
    ID, max(OfferID) AS OfferID
  FROM 
    tbl
  WHERE ID NOT IN (SELECT ID FROM tmp1)
  GROUP BY ID
)
SELECT * FROM tmp1
UNION ALL
SELECT * FROM tmp2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM