Poniższa tabela historii użytkownika zawiera jeden rekord na każdy dzień, w którym dany użytkownik odwiedził witrynę (w okresie 24 godzin UTC). Ma wiele tysięcy rekordów, ale tylko jeden rekord dziennie na użytkownika. Jeśli użytkownik nie uzyskał dostępu do witryny w tym dniu, żaden rekord nie zostanie wygenerowany.
Id UserId CreationDate ------ ------ ------------ 750997 12 2009-07-07 18: 42: 20.723 750998 15 2009-07-07 18: 42: 20.927 751000 19 2009-07-07 18: 42: 22.283
To, czego szukam, to zapytanie SQL w tej tabeli z dobrą wydajnością , które mówi mi, które identyfikatory użytkowników miały dostęp do witryny przez (n) ciągłych dni, nie tracąc ani jednego dnia.
Innymi słowy, ilu użytkowników ma (n) rekordów w tej tabeli z datami sekwencyjnymi (dzień przed lub dzień po) ? Jeśli w sekwencji brakuje któregokolwiek dnia, sekwencja jest przerywana i powinna zostać wznowiona od 1; szukamy użytkowników, którzy osiągnęli tutaj ciągłą liczbę dni bez przerw.
Każde podobieństwo między tym zapytaniem a konkretną odznaką przepełnienia stosu jest oczywiście czysto przypadkowe. :)