Mam problem z grupowaniem mojego zestawu danych w MS SQL Server.Grupowanie SQL według datetime z maksymalną różnicą x minut
Moja tabela wygląda
# | CustomerID | SalesDate | Turnover
---| ---------- | ------------------- | ---------
1 | 1 | 2016-08-09 12:15:00 | 22.50
2 | 1 | 2016-08-09 12:17:00 | 10.00
3 | 1 | 2016-08-09 12:58:00 | 12.00
4 | 1 | 2016-08-09 13:01:00 | 55.00
5 | 1 | 2016-08-09 23:59:00 | 10.00
6 | 1 | 2016-08-10 00:02:00 | 5.00
Teraz chcę grupy wiersze gdzie różnica SalesDate do następnego wiersza jest maksymalnie 5 minut. Tak więc ten wiersz 1 & 2, 3 & 4 i 5 & 6 to każda jedna grupa.
My podejście się protokół z funkcją DATEPART() i podzielenie wyniku przez 5:
(DATEPART(MINUTE, SalesDate)/5)
dla rzędu 1 i 2 wynika, że 3 do grupowania się tutaj będzie działać doskonale. Jednak w przypadku innych wierszy, w których występuje zmiana w godzinie lub nawet w części dziennej wartości SalesDate, wyniku nie można użyć do grupowania.
Więc to jest, gdzie utknąłem. Byłbym wdzięczny, gdyby ktoś wskazał mi właściwy kierunek.
wyboru [to] (http://stackoverflow.com/questions/17560829/how-can-i-subtract-a-previous-row-in-sql) lub [to] (http: // stackoverflow.com/questions/13734976/sql-best-way-to-subtract-a-value-of-previous-row-in--query) – techspider
Możesz napisać zapytanie wykorzystujące LEAD lub LAG do sprawdzenia następny wiersz i znajdź różnicę czasu, a następnie użyj DENSE_RANK, aby przypisać numer grupowania, partycjonowanie z różnicą> 5 minut. Następnie zgrupuj na tym numerze grupowym. Jest to intensywny proces, jeśli zamierzasz zapisać go w jednym zapytaniu w wielu wierszach. –
Myślę, że to dobre pierwsze pytanie. –