簡體   English   中英

SQL 中的行號

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM