Looking for ways to specify the start time of a PARTITION BY statement in SQL Server.
Partitioning a years worth of data into 60 minute segments. The data is 10 minute collections from an IOT device. Would like the partitions to start at 6AM each day.
How do I accomplish that fixed start time every day?
Here's some sample data. Want the windowing (partition) to start on the hour:
Sample data, 10 minute data sampling:
code | datetimePDT | data |
---|---|---|
AA01 | 12/15/2021 05:44 AM | 0100 |
AA02 | 12/15/2021 05:54 AM | 0105 |
AA03 | 12/15/2021 06:04 AM | 0103 |
AA04 | 12/15/2021 06:14 AM | 0109 |
AA05 | 12/15/2021 06:24 AM | 0112 |
AA06 | 12/15/2021 06:34 AM | 0115 |
AA07 | 12/15/2021 06:44 AM | 0119 |
AA08 | 12/15/2021 06:54 AM | 0125 |
AA09 | 12/15/2021 07:04 AM | 0135 |
AA10 | 12/15/2021 07:14 AM | 0155 |
AA11 | 12/15/2021 07:24 AM | 0195 |
In a stored procedure - Ranking by minute: dense_rank() over (order by datepart(day,datetimePDT), datepart(hour,datetimePDT), datepart(minute,datetimePDT)) minuteRank
Grouping minutes into hours: CEILING((minuteRank-1)/10) hourGroup
Then doing things like pulling out the average: avg(data) over (partition by hourGroup) as GroupAVG
Prefer the hourGroup to start at 6 AM, so my GroupAVG is over the rows from 6:04 to 6:54, and the next partition is from 7-8 AM.
To make this more complicated, there may be missing data, so I can't rely on the data collection period being 10 minutes.
Want to get here:
code | datetimePDT | data | minuteRank | hourGroup |
---|---|---|---|---|
AA01 | 12/15/2021 05:44 AM | 0100 | 01 | NULL |
AA02 | 12/15/2021 05:54 AM | 0105 | 02 | NULL |
AA03 | 12/15/2021 06:04 AM | 0103 | 03 | 0001 |
AA04 | 12/15/2021 06:14 AM | 0109 | 04 | 0001 |
AA05 | 12/15/2021 06:24 AM | 0112 | 05 | 0001 |
AA06 | 12/15/2021 06:34 AM | 0115 | 06 | 0001 |
AA07 | 12/15/2021 06:44 AM | 0119 | 07 | 0001 |
AA08 | 12/15/2021 06:54 AM | 0125 | 08 | 0001 |
AA09 | 12/15/2021 07:04 AM | 0135 | 09 | 0002 |
AA10 | 12/15/2021 07:14 AM | 0155 | 10 | 0002 |
AA11 | 12/15/2021 07:24 AM | 0195 | 11 | 0002 |