Mam dane zawierające daty. Próbuję pogrupować dane według kolejnych dat, jednak daty nie są dokładnie następujące po sobie. Oto przykład:Zapisywanie grup według kolejnych dat, gdy daty nie są dokładnie następujące po sobie
DateColumn | Value
------------------------+-------
2017-01-18 01:12:34.107 | 215426 <- batch no. 1
2017-01-18 01:12:34.113 | 215636
2017-01-18 01:12:34.623 | 123516
2017-01-18 01:12:34.633 | 289926
2017-01-18 04:58:42.660 | 259063 <- batch no. 2
2017-01-18 04:58:42.663 | 261830
2017-01-18 04:58:42.893 | 219835
2017-01-18 04:58:42.907 | 250165
2017-01-18 05:18:14.660 | 134253 <- batch no. 3
2017-01-18 05:18:14.663 | 134257
2017-01-18 05:18:14.667 | 134372
2017-01-18 05:18:15.040 | 181679
2017-01-18 05:18:15.043 | 226368
2017-01-18 05:18:15.043 | 227070
Dane są generowane w partiach, a każdy rząd wewnątrz wsadu trwa kilka milisekund do wytworzenia. Próbuję grupie wyniki następująco:
Date1 | Date2 | Count
------------------------+-------------------------+------
2017-01-18 01:12:34.107 | 2017-01-18 01:12:34.633 | 4
2017-01-18 04:58:42.660 | 2017-01-18 04:58:42.907 | 4
2017-01-18 05:18:14.660 | 2017-01-18 05:18:15.043 | 6
Jest bezpiecznie założyć, że jeśli dwa kolejne rzędy są więcej niż 1 minuta od siebie wtedy, że należą do innej partii.
Próbowałem rozwiązań obejmujących funkcję ROW_NUMBER
, ale działają one z kolejnymi datami (różnica daty między dwoma wierszami jest stała). Jak osiągnąć pożądany rezultat, gdy różnica jest niewyraźna?
Należy pamiętać, że partia może być dłuższa niż minuta. Na przykład partia może składać się z rzędów rozpoczynających się od 2017-01-01 00:00:00 i kończących się w dniu 2017-01-01 00:05:00, składających się z ~ 3000 wierszy i każdego rzędu oddalonych od siebie o kilkadziesiąt lub sto milisekund. Pewne jest to, że partie są oddalone o co najmniej 1 minutę.
ponownie "czy to jest bezpieczne ..." nie możemy powiedzieć - firma lub inni eksperci domeny będą jedyni, którzy mogą powiedzieć. Jeśli w partiach potrzebujesz identyfikatora dla każdej partii i używasz tego – Mark
, czy dwa ostatnie wiersze mają tę samą wartość datetime lub czy jest to literówka? –
@vkp To dziwne, ale nie literówka. Być może wstawiono dwa wiersze w ciągu 1 milisekundy lub faktyczny czas został zaokrąglony do najbliższej wartości 'datetime'. –