Time Series Analysis in SQL Server
Maham Faisal Khan
Senior Data Science Content Developer
StartTime | EndTime | ProductsOrdered |
---|---|---|
2019-07-08 14:35:00 | 2019-07-08 16:01:00 | 13 |
2019-07-08 15:35:00 | 2019-07-08 17:01:00 | 13 |
2019-07-08 16:35:00 | 2019-07-08 18:01:00 | 17 |
2019-07-08 17:35:00 | 2019-07-08 19:01:00 | 15 |
2019-07-08 17:55:00 | 2019-07-08 17:57:00 | 1 |
2019-07-08 20:35:00 | 2019-07-08 22:01:00 | 13 |
StartTime | EndTime | ProductsOrdered |
---|---|---|
2019-07-08 14:35:00 | 2019-07-08 16:01:00 | 13 |
2019-07-08 15:35:00 | 2019-07-08 17:01:00 | 13 |
2019-07-08 16:35:00 | 2019-07-08 18:01:00 | 17 |
2019-07-08 17:35:00 | 2019-07-08 19:01:00 | 15 |
2019-07-08 17:55:00 | 2019-07-08 17:57:00 | 1 |
2019-07-08 20:35:00 | 2019-07-08 22:01:00 | 13 |
StartTime | EndTime | ProductsOrdered |
---|---|---|
2019-07-08 14:35:00 | 2019-07-08 16:01:00 | 13 |
2019-07-08 15:35:00 | 2019-07-08 17:01:00 | 13 |
2019-07-08 16:35:00 | 2019-07-08 18:01:00 | 17 |
2019-07-08 17:35:00 | 2019-07-08 19:01:00 | 15 |
2019-07-08 17:55:00 | 2019-07-08 17:57:00 | 1 |
2019-07-08 20:35:00 | 2019-07-08 22:01:00 | 13 |
CTE StartStopPoints:
SELECT
o.StartTime AS TimeUTC,
1 AS EntryCount,
ROW_NUMBER() OVER (ORDER BY o.StartTime) AS StartOrdinal
FROM #Orders o
UNION ALL
SELECT
o.EndTime AS TimeUTC,
-1 AS EntryCount,
NULL AS StartOrdinal
FROM #Orders o
TimeUTC | EntryCount | StartOrdinal |
---|---|---|
14:35:00 | 1 | 1 |
15:35:00 | 1 | 2 |
16:35:00 | 1 | 3 |
17:35:00 | 1 | 4 |
17:55:00 | 1 | 5 |
20:35:00 | 1 | 6 |
TimeUTC | EntryCount | StartOrdinal |
---|---|---|
16:01:00 | -1 | NULL |
17:01:00 | -1 | NULL |
18:01:00 | -1 | NULL |
19:01:00 | -1 | NULL |
17:57:00 | -1 | NULL |
22:01:00 | -1 | NULL |
CTE StartStopOrder:
SELECT
s.TimeUTC,
s.EntryCount,
s.StartOrdinal,
ROW_NUMBER() OVER (ORDER BY TimeUTC, StartOrdinal) AS StartOrEndOrdinal
FROM StartStopPoints s
TimeUTC | EC | SO | StartEndOrdinal |
---|---|---|---|
14:35:00 | 1 | 1 | 1 |
15:35:00 | 1 | 2 | 2 |
16:01:00 | -1 | NULL | 3 |
16:35:00 | 1 | 3 | 4 |
17:01:00 | -1 | NULL | 5 |
17:35:00 | 1 | 4 | 6 |
TimeUTC | EC | SO | StartEndOrdinal |
---|---|---|---|
17:55:00 | 1 | 5 | 7 |
17:57:00 | -1 | NULL | 8 |
18:01:00 | -1 | NULL | 9 |
19:01:00 | -1 | NULL | 10 |
20:35:00 | 1 | 6 | 11 |
22:01:00 | -1 | NULL | 12 |
TimeUTC | EC | SO | StartEndOrdinal |
---|---|---|---|
14:35:00 | 1 | 1 | 1 |
15:35:00 | 1 | 2 | 2 |
16:01:00 | -1 | NULL | 3 |
16:35:00 | 1 | 3 | 4 |
17:01:00 | -1 | NULL | 5 |
17:35:00 | 1 | 4 | 6 |
TimeUTC | EC | SO | StartEndOrdinal |
---|---|---|---|
17:55:00 | 1 | 5 | 7 |
17:57:00 | -1 | NULL | 8 |
18:01:00 | -1 | NULL | 9 |
19:01:00 | -1 | NULL | 10 |
20:35:00 | 1 | 6 | 11 |
22:01:00 | -1 | NULL | 12 |
TimeUTC | StartOrdinal | StartEndOrdinal | Calc | Result |
---|---|---|---|---|
14:35:00 | 1 | 1 | (2*1) - 1 | 1 |
15:35:00 | 2 | 2 | (2*2) - 2 | 2 |
16:01:00 | NULL | 3 | NULL | NULL |
16:35:00 | 3 | 4 | (2*3) - 4 | 2 |
17:01:00 | NULL | 5 | NULL | NULL |
17:35:00 | 4 | 6 | (2*4) - 6 | 2 |
SELECT
MAX(2 * s.StartOrdinal - s.StartOrEndOrdinal) AS MaxConcurrentVisitors
FROM StartStopOrder s
WHERE s.EntryCount = 1;
MaxConcurrentVisitors |
---|
3 |
Time Series Analysis in SQL Server