Filtrowanie i odrzucenie najbliższych elementów

Filtrowanie i odrzucenie najbliższych elementów
anckor
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 314
0

Załóżmy, że mam rekordy w bazie w takiej postaci:

  1. Wartość: 99 Timestamp: 2020-12-10 20:00:00

  2. Wartość: 100 Timestamp: 2020-12-10 19:59:50

  3. Wartość: 44 Timestamp: 2020-12-10 18:00:00

  4. Wartość: 36 Timestamp: 2020-12-10 17:59:50

I ostatecznie po odfiltorwaniu chciałbym w mojej wynikowej liście mieć jedynie rekordy nr 1 i 3 - czyli z danego podzbioru wziąć jedynie najnowszy rekord a resztę odrzucić. Można założyć, że dane należą do różnych podzbiorów jeżeli wartość ich timestamp różni się o ponad godzinę. Jest jakiś algorytm jak to najwydajniej wykonać?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Którą z kombinacji chciałbyś otrzymać dla takiego zbioru?

Kopiuj
id=1, timestamp=12:00:00
id=2, timestamp=12:30:01
id=3, timestamp=13:00:02
id=4, timestamp=13:30:03
id=5, timestamp=14:00:04

Warianty, które dostrzegam:

  • (1, 3) (1+2 jako pierwsza grupa, 3+4 jako druga)
  • (1, 3, 5) (1+2 jako pierwsza grupa, 3+4 jako druga, 5 samo w sobie jako trzecia)
  • (2, 4) (2+3 jako pierwsza grupa, 4+5 jako druga)
  • (1, 2, 4) (1 samo w sobie, 2+3 jako druga grupa, 4+5 jako trzecia)
anckor
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 314
0

Hmm takiego zbioru akurat miał nie będę ponieważ rekordy wpadają co kilka sekund, później jest przerwa około 1h i znowu wpadają co kilka sekund, czyli zbiór danych na którym wygląda tak jak ten który podałem w pierwszym poście. I potrzebuję oddzielić od siebie rekordy te które wpadały od tych które wpadały godzinę później.

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
0

Zakładając DB, które nie wspiera MATCH_RECOGNIZE to trzeba się posiłkować window functions - https://modern-sql.com/feature/match_recognize. Alternatywnie możesz zrobić debounce na wejściu. Rozwiązań jest parę i ciężko coś powiedzieć bez większej ilości informacji.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.