[英]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.