我嘗試獲取 SQL Server 中資料更改之間的日期范圍,我的查詢是
select count(1) as qty, Info, convert(char,dFError,100) dErr
from TableData
group by Info, convert(char,dFError,100)
order by dErr asc
我有這個 qty 有對服務器的請求數,資訊是服務器 ip 和請求發送到另一臺服務器的日期。
| 數量 | 資訊 | 錯誤 |
|---|---|---|
| 1 | 1.97 | 2021 年 8 月 11 日上午 9:01 |
| 1 | 1.97 | 2021 年 8 月 11 日上午 9:06 |
| 88 | 1.33 | 2021 年 12 月 21 日下午 2:04 |
| 1 | 1.95 | 2021 年 12 月 22 日晚上 9:44 |
| 9 | 1.95 | 2021 年 12 月 22 日晚上 9:45 |
| 1 | 1.33 | 2021 年 12 月 22 日晚上 9:51 |
| 19 | 1.33 | 2021 年 12 月 22 日晚上 9:52 |
| 3 | 1.33 | 2021 年 12 月 22 日晚上 9:53 |
| 6 | 1.33 | 2021 年 12 月 27 日晚上 7:10 |
| 17 | 1.33 | 2021 年 12 月 27 日晚上 7:11 |
| 15 | 1.95 | 2021 年 12 月 27 日晚上 7:17 |
| 8 | 1.95 | 2021 年 12 月 27 日晚上 7:18 |
我想要這個,在 8 月 11 日上午 9 點 06 分都將變為 1.97,在 12 月 21 日下午 2 點 04 分都將變為 1.33,這意味著日期和資訊
| 數量 | 資訊 | 錯誤 |
|---|---|---|
| 2 | 1.97 | 2021 年 8 月 11 日上午 9:06 |
| 88 | 1.33 | 2021 年 12 月 21 日下午 2:04 |
| 10 | 1.95 | 2021 年 12 月 22 日晚上 9:45 |
| 46 | 1.33 | 2021 年 12 月 27 日晚上 7:11 |
| 23 | 1.95 | 2021 年 12 月 27 日晚上 7:18 |
在同一天可以是不同小時的同一組數字
| 數量 | 資訊 | 錯誤 |
|---|---|---|
| 1 | 1.97 | 2022 年 1 月 24 日上午 9:39 |
| 1 | 1.97 | 2022 年 1 月 24 日上午 9:51 |
| 1 | 1.97 | 2022 年 1 月 24 日上午 9:58 |
| 4 | 1.97 | 2022 年 1 月 24 日上午 10:08 |
| 1 | 1.97 | 2022 年 1 月 24 日上午 10:12 |
| 8 | 1.95 | 2022 年 1 月 24 日上午 10:24 |
| 2 | 1.95 | 2022 年 1 月 24 日上午 10:32 |
| 10 | 1.33 | 2022 年 1 月 24 日上午 10:33 |
| 1 | 1.33 | 2022 年 1 月 24 日上午 11:37 |
| 8 | 1.95 | 2022 年 1 月 24 日上午 11:59 |
| 1 | 1.95 | 2022 年 1 月 24 日下午 12:00 |
| 2 | 1.95 | 2022 年 1 月 24 日下午 12:08 |
并且需要像這樣顯示
| 數量 | 資訊 | 錯誤 |
|---|---|---|
| 8 | 1.97 | 2022 年 1 月 24 日上午 10:12 |
| 10 | 1.95 | 2022 年 1 月 24 日上午 10:32 |
| 11 | 1.33 | 2022 年 1 月 24 日上午 11:37 |
| 11 | 1.95 | 2022 年 1 月 24 日下午 12:08 |
uj5u.com熱心網友回復:
雙排號可用于計算排名。
然后可以在聚合中使用排名來解決這種 Gaps-And-Islands 型別的問題。
select sum(qty) as qty, Info, max(dFError) as dErr from ( select Info, dFError, qty , convert(date, dFError) as dErrorDate , Rnk = row_number() over (order by dFError) row_number() over (partition by Info order by dFError desc) from TableData ) q group by Info, Rnk order by dErr;
數量 資訊 錯誤 2 1.97 2021-08-11 09:06:00.000 88 1.33 2021-12-21 14:04:00.000 10 1.95 2021-12-22 21:45:00.000 46 1.33 2021-12-27 19:11:00.000 23 1.95 2021-12-27 19:18:00.000 8 1.97 2022-01-24 10:12:00.000 10 1.95 2022-01-24 10:32:00.000 11 1.33 2022-01-24 11:37:00.000 11 1.95 2022-01-24 12:08:00.000
關于db<>fiddle的演示在這里
uj5u.com熱心網友回復:
select
SUM(P_COUNT) as "COUNT",
P_DATA as "DATA",
MAX(FECHA) as "FECHA"
from
TABLEA
GROUP BY
P_DATA, CONVERT(DATE, FECHA)
ORDER BY "FECHA"
uj5u.com熱心網友回復:
您的預期結果與給定資料不匹配 - 在第一組中,您有 12/22 的行,1.33 和 1.95,但未包含在預期結果中。
在我看來,您想按日期或日期\小時進行分組。以下是兩者的示例:
Declare @testTable table (qty int, Info numeric(3,2), dErr datetime);
Insert Into @testTable (qty, Info, dErr)
Values ( 1, 1.97, 'Aug 11 2021 9:01AM')
, ( 1, 1.97, 'Aug 11 2021 9:06AM')
, (88, 1.33, 'Dec 21 2021 2:04PM')
, ( 1, 1.95, 'Dec 22 2021 9:44PM')
, ( 9, 1.95, 'Dec 22 2021 9:45PM')
, ( 1, 1.33, 'Dec 22 2021 9:51PM')
, (19, 1.33, 'Dec 22 2021 9:52PM')
, ( 3, 1.33, 'Dec 22 2021 9:53PM')
, ( 6, 1.33, 'Dec 27 2021 7:10PM')
, (17, 1.33, 'Dec 27 2021 7:11PM')
, (15, 1.95, 'Dec 27 2021 7:17PM')
, ( 8, 1.95, 'Dec 27 2021 7:18PM')
, ( 1, 1.97, 'Jan 24 2022 9:39AM')
, ( 1, 1.97, 'Jan 24 2022 9:51AM')
, ( 1, 1.97, 'Jan 24 2022 9:58AM')
, ( 4, 1.97, 'Jan 24 2022 10:08AM')
, ( 1, 1.97, 'Jan 24 2022 10:12AM')
, ( 8, 1.95, 'Jan 24 2022 10:24AM')
, ( 2, 1.95, 'Jan 24 2022 10:32AM')
, (10, 1.33, 'Jan 24 2022 10:33AM')
, ( 1, 1.33, 'Jan 24 2022 11:37AM')
, ( 8, 1.95, 'Jan 24 2022 11:59AM')
, ( 1, 1.95, 'Jan 24 2022 12:00PM')
, ( 2, 1.95, 'Jan 24 2022 12:08PM');
--==== Grouped by date
Select total_qty = sum(tt.qty)
, tt.Info
, latest_date = max(tt.dErr)
From @testTable tt
Group By
tt.Info
, cast(tt.dErr As date)
Order By
cast(tt.dErr As date);
--==== Grouped by date\hour
Select total_qty = sum(tt.qty)
, tt.Info
, latest_date = max(tt.dErr)
From @testTable tt
Group By
tt.Info
, cast(tt.dErr As date)
, datepart(Hour, tt.dErr)
Order By
cast(tt.dErr As date)
, datepart(Hour, tt.dErr);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/425372.html
