我想查找特定 ID 的值是否已更改
| ID | 付款方式 |
|---|---|
| 1 | 現金 |
| 1 | 簽證 |
| 1 | 現金 |
| 2 | 現金 |
| 2 | 現金 |
| 2 | 現金 |
| 3 | 查看 |
| 3 | 簽證 |
| 3 | 簽證 |
| 4 | 現金 |
| 4 | 現金 |
| 4 | 現金 |
例如,ID 1 和 ID 3 更改了他們的付款方式,我想撰寫一個可以檢測到該更改的查詢,在此先感謝
預期輸出示例:
| ID | 付款方式已更改 |
|---|---|
| 1 | 簽證 |
| 2 | 查看 |
uj5u.com熱心網友回復:
您可以使用:
SELECT id,
MIN(payment_method) KEEP (DENSE_RANK FIRST ORDER BY ROWNUM)
AS payment_method
FROM table_name
GROUP BY id
HAVING COUNT(DISTINCT payment_method) > 1
或者:
SELECT *
FROM (
SELECT id,
payment_method,
ROWNUM AS ordering_column
FROM table_name t
)
MATCH_RECOGNIZE(
PARTITION BY id
ORDER BY ordering_column
MEASURES
FIRST(payment_method) AS payment_method
PATTERN (^ same diff)
DEFINE
same AS FIRST(payment_method) = payment_method,
diff AS diff.payment_method <> same.payment_method
);
(注意:ROWNUM應該替換為一個列,該列將標識每個行中的確定性排序,ID例如時間戳列;但是,這樣的列不存在于您的示例資料中,因此無法使用。ROWNUM只會對中的行進行編號SQL 引擎處理它們的順序和處理順序可能是不確定的。)
兩者都輸出:
ID 付款方式 1 現金 3 查看
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/417572.html
標籤:
上一篇:帶有OVER子句的嵌套SUM
