'Getting datetime count range in SQL Server
I try to get the date range between the data changes in SQL Server my query is
select count(1) as qty, Info, convert(char,dFError,100) dErr
from TableData
group by Info, convert(char,dFError,100)
order by dErr asc
I have this qty has the number of reques to a server, info are the servers ip and the date it's when a request it's sended to another server.
| qty | Info | dErr |
|---|---|---|
| 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 |
and I want this, in Aug 11 at 9:06AM all are going to 1.97, at Dec 21 at 2:04PM all are going to 1.33, that means the date and the info
| qty | Info | dErr |
|---|---|---|
| 2 | 1.97 | Aug 11 2021 9:06AM |
| 88 | 1.33 | Dec 21 2021 2:04PM |
| 10 | 1.95 | Dec 22 2021 9:45PM |
| 46 | 1.33 | Dec 27 2021 7:11PM |
| 23 | 1.95 | Dec 27 2021 7:18PM |
in the same day can be the same group of numbers on distinct hour
| qty | Info | dErr |
|---|---|---|
| 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 |
and need to be displayed like
| qty | Info | dErr |
|---|---|---|
| 8 | 1.97 | Jan 24 2022 10:12AM |
| 10 | 1.95 | Jan 24 2022 10:32AM |
| 11 | 1.33 | Jan 24 2022 11:37AM |
| 11 | 1.95 | Jan 24 2022 12:08PM |
Solution 1:[1]
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"
Solution 2:[2]
Your expected results don't match the given data - in the first set you have rows for 12/22 with both 1.33 and 1.95, but not included in your expected results.
It seems to me you want to either group by the date - or the date\hour. Here is an example of both:
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);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Ramin Faracov |
| Solution 2 | Jeff |
