Wybieranie rekordów o podobnych czasach z odchyleniem 5 sekund |
Wybieranie rekordów o podobnych czasach z odchyleniem 5 sekund |
6.12.2013, 13:15:40
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.12.2013 Ostrzeżenie: (0%) |
Witam, mam tabelę o nasepującej strukturze:
W tabeli znajduje się standardowo koło 12000 rekordów, które są codziennie dodawane i usuwane. Mój problem: Jak wyłapać rekordy, które są podobne pod względem czasu (pole data) z odchyleniem +-5sekund. i pogrupować je według pola data? |
|
|
10.12.2013, 12:42:55
Post
#2
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 13 Dołączył: 16.06.2007 Ostrzeżenie: (0%) |
|
|
|
10.01.2014, 16:45:45
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.12.2013 Ostrzeżenie: (0%) |
Dzięki, jednak niestety nie zupełnie mi o to chodziło. Nie mam mu podawać żadnej daty - on ma sam wszystkie możliwości wybrać. Może na podstawie danych będzie łatwiej:
Taki wykaz czasów: 10:12:11 10:33:50 10:30:14 11:30:26 11:06:23 10:33:54 11:30:25 10:33:48 Efektem zapytania ma być: 10:33:50 10:33:54 10:33:48 11:30:26 11:30:25 |
|
|
10.01.2014, 22:07:46
Post
#4
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 60 Dołączył: 25.02.2012 Ostrzeżenie: (0%) |
Ciekawe zagadnienie. Udało Ci się coś zrobić?
Zacznijmy od tego, że jako wynik zapytania nie możesz dostać wiersza ze spacją który rozdzielałby grupy. Zaproponuj, jakby to miało wyglądać biorąc pod uwagę rzeczywiste możliwości zwrócenia jakiegoś wyniku. Przykłady: A) id_grupy, czas 1, 10:33:50 1, 10:33:54 1, 10:33:48 2, 11:30:26 2, 11:30:25 B ) id_wierszy_z_czasami_w_jednej_grupie_rozdzielone_znakiem_podkreslenia 2_6_8 4_7 (założyłem, że czas 10:12:11 ma id 1 a czas 10:33:48 ma id 8) C) może utworzona inna tabela (tymczasowa?) do której byłyby wstawiane wiersze z id czasu (lub czasem) oraz numerem grupy? D) inny sposób prezentacji wyniku? Jak się do tego zabrać? Może najpierw pobrać czas minimalny, zwiększyć tą wartość o o połowę przedziału (czyli 2,5 sekundy) a następnie sprawdzać obecność rekordów z czasem w zakresie +-2,5 s od tej wartości, która w każdym kroku będzie zwiększana o 5 sekund aż do osiągnięcia czasu maksymalnego obecnego w tabeli? Ten post edytował irmidjusz 10.01.2014, 22:09:32 -------------------- there is much to be learned
|
|
|
12.01.2014, 11:42:00
Post
#5
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.12.2013 Ostrzeżenie: (0%) |
Ciekawe zagadnienie. Udało Ci się coś zrobić? Mimo pozornej prostoty jednak jest to dość skomplikowane (przynajmniej jak dla mnie). Moja wersja wyglda tak:
Niestety nie jest to doskonałe rozwiązanie, bo gubi mi część danych mieszczących się w zakresie. Sposób dostarczania wyniku jest dla mnie obojętny. Korzystam z php więc najlepiej aby wynikiem był wiersz wg powyższego zapytania. Jak się zabrać? Moja wizja jest taka: 1) Wybieramy wszystkie zjawiska z tabeli i nazywamy lista1 2) Duplikujemy lista1 do lista2 3) Tworzymy licznik i nadajemy mu wartość 0 4) Tworzymy pustą liste3 - będzie ona zawierać powtarzajace się dane 5) pobieramy element lista1[licznik] 6) w pętli sprawdzamy każdą wartość listy2 w poszukiwaniu czasu +-5 sekund od wartości z pkt. 5 7) jeżeli czas się mieści w kryterium wpisujemy do listy3 jednocześnie usuwając z listy2 8) zwiększamy licznik o 1 9) jeżeli licznik<liczby elementów lista1 wracamy do pkt. 5 Do tego jakby się udało zgrupować dane z lista3 wg wartości z lista1 to już byłby full wypas. W php bym to napisał, jednak chodzi o wydajność, więc wypada zaprzęgnąć do tego mysql. |
|
|
Wersja Lo-Fi | Aktualny czas: 20.09.2024 - 08:10 |