我在 SQL Server 管理中有一個表,其中包含按小時計算的錯誤計數。該表使用了四個主要列 Errors、StartTime、EndTime 和 Count。有沒有辦法可以選擇每小時發生的前 1 個錯誤或前 5 個錯誤?
一個典型的條目看起來像這樣:
| 錯誤 | 開始時間 | 時間結束 | 數數 |
|---|---|---|---|
| 錯誤 1 | 2022-06-27 00:00:00 | 2022-06-27 01:00:00 | 8 |
| 錯誤 2 | 2022-06-27 00:00:00 | 2022-06-27 01:00:00 | 9 |
| 錯誤 1 | 2022-06-27 01:00:00 | 2022-06-27 02:00:00 | 1 |
| 錯誤 3 | 2022-06-27 01:00:00 | 2022-06-27 02:00:00 | 19 |
例如,在這種情況下,error 2將是 0 和 1 小時之間的最大錯誤,并且error 3將是 1 和 2 小時之間的最大錯誤。
uj5u.com熱心網友回復:
WITH cte
AS (
SELECT EndTime,
Error,
[Count],
ROW_NUMBER() OVER (
PARTITION BY EndTime ORDER BY [Count] DESC
) AS rn
FROM TABLENAME
)
SELECT EndTime,
Error,
[Count],
rn
FROM cte
WHERE rn <= 5
ORDER BY EndTime,
[Count] DESC
您可以在這里嘗試使用DBFiddle
uj5u.com熱心網友回復:
我已經為你寫了一個解決方案。請檢查一下,希望能解決你的問題
;WITH cte AS
(
SELECT *,
dense_rank() OVER (PARTITION BY StartTime,EndTime ORDER BY Count DESC) AS
rn
FROM Table
)
SELECT *
FROM cte
WHERE rn = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/495805.html
上一篇:過濾一列是json的SQL查詢
