if i have the data like the picture above, let’s say 1 day data per minute, and i want to filter it to be per hour, so i will have 24 data, because i take the data per hour. how to do that
i have tried some queries, like this one using group by, but the result is not like i want. didn’t work for grouping the datas.
x
SELECT myDatetime FROM datates
WHERE myDatetime >= '2020-03-01 05:30:00'
AND myDatetime < DATEADD(DAY,1,'2020-03-01 07:30:00')
group by myDatetime ,DATEPART(hour,myDatetime )
Advertisement
Answer
You can use row_number()
. For instance, if you want the first value per hour:
select d.*
from (select d.*,
row_number() over (partition by convert(date, myDatetime), datepart(hour, myDatetime) order by mydatetime) as seqnum
from datates d
) d
where seqnum = 1;
If you want to sum the values, use aggregation:
select dateadd(hour, datepart(hour, myDatetime), convert(datetime, convert(date, myDatetime))),
sum(nilai)
from datates d
group by dateadd(hour, datepart(hour, myDatetime), convert(datetime, convert(date, myDatetime)));