簡體   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