[英]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
根据身份证,
上述场景需要适用于一整套数据。
请帮忙。
我们可以在此处使用具有适当排序级别的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.