[英]Row_number in SQL
我有這張表“triggerTable”
扳機 | 日期 | 是錯誤 |
---|---|---|
一個 | 2021-02-16 04:08:12.810 | 0 |
b | 2021-01-31 04:09:22.977 | 1 |
c | 2021-02-10 04:15:34.740 | 1 |
c | 2021-02-16 04:16:06.037 | 0 |
d | 2021-02-12 04:15:34.740 | 0 |
d | 2021-02-13 04:16:06.037 | 1 |
e | 2021-01-24 04:15:34.740 | 0 |
e | 2021-01-31 04:16:06.037 | 0 |
我需要為每個觸發器提供最新日期以及是否為 isError(1) 或不是 isError(0)。 如果觸發器失敗(甚至不是最近),我需要該行。
我怎樣才能在 SQL 腳本中擁有這個 output?
扳機 | 日期 | 是錯誤 |
---|---|---|
一個 | 2021-02-16 04:08:12.810 | 0 |
b | 2021-01-31 04:09:22.977 | 1 |
c | 2021-02-10 04:15:34.740 | 1 |
d | 2021-02-13 04:16:06.037 | 1 |
e | 2021-01-31 04:16:06.037 | 0 |
謝謝
將ROW_NUMBER
與適當的ORDER BY
子句一起使用:
WITH cte AS (
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY "trigger"
ORDER BY isError DESC, date DESC) rn
FROM triggerTable t
)
SELECT "trigger", date, isError
FROM cte
WHERE rn = 1;
上面的邏輯會首先嘗試返回錯誤的最新記錄。 如果沒有記錄出錯,則默認返回沒有出錯的最新記錄。
您可以使用條件聚合來做到這一點:
select trigger,
coalesce(case when isError = 1 then date end,
max(date)
) as date,
max(isError) as isError
from t
group by trigger;
使用MAX()
和FIRST_VALUE()
window 函數:
SELECT DISTINCT trigger,
MAX(date) OVER (PARTITION BY trigger) date,
FIRST_VALUE(isError) OVER (PARTITION BY trigger ORDER BY date DESC) isError
FROM triggerTable
請參閱演示。
結果:
扳機 | 日期 | 是錯誤 |
---|---|---|
一個 | 2021-02-16 04:08:12.810 | 0 |
b | 2021-01-31 04:09:22.977 | 1 |
c | 2021-02-16 04:16:06.037 | 0 |
d | 2021-02-13 04:16:06.037 | 1 |
e | 2021-01-31 04:16:06.037 | 0 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.