![]() |
![]() |
![]()
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? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 13 Dołączył: 16.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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 |
|
|
![]()
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ą ![]() 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
|
|
|
![]()
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 11:02 |