Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[SQL] Zapytanie do bazy danych.

ja_fryta 23 Maj 2010 07:47 2524 4
  • #1 23 Maj 2010 07:47
    ja_fryta
    Poziom 19  

    Zapewne jest to banalne ale jakoś nie mogę sobie z tym poradzić wiec proszę o pomoc.
    Mamy jedna tabele z polami id, user_id, data_czas
    Pola w tabeli pojawiają się w rożnych odstępach czasu.
    Potrzebuje wychwycić te id gdzie (user_id = user_id + 1) i (diff(data_czas i data_czas + 1) < 60 s)

    0 4
  • #3 23 Maj 2010 10:30
    ja_fryta
    Poziom 19  

    Mysql 5.1
    diff - nie wiem która funkcja podaje różnice w sekundach - to tylko napisałem żeby pokazać o co mi chodzi.
    id, user_id to inty data_czas to datetime

    id | user_id | data_czas
    ------------------------------
    1 | 3 | 23.05.2010 10:26:26
    2 | 3 | 23.05.2010 10:27:03
    3 | 4 | 23.05.2010 10:27:04
    4 | 3 | 23.05.2010 10:28:50

    i tak dalej
    z tego chciał bym aby znalazło rekord 1 i 2 bo user_id to i tu jest taki sam a czas miedzy nimi jest < 60s

    0
  • Pomocny post
    #4 23 Maj 2010 10:46
    Dżyszla
    Poziom 42  

    Spróbuj czegoś takiego:

    Code:

    SELECT t1.*
    FROM tabela t1
    JOIN tabela t2 ON (t2.user_id=t1.user_id)
    WHERE ABS(TIME_TO_SEC(TIMEDIFF(t2.data_czas,t1.data_czas)))<60

    Ale może Ci zwrócić więcej razy dany rekord! Można też tak:
    Code:

    SELECT t1.*,(SELECT t2.data_czas FROM tabela t2 WHERE t2.user_id=t1.user_id AND t2.data_czas>t1.data_czas ORDER BY t2.data_czas LIMIT 1) AS t2_czas
    FROM tabela t1
    WHERE ABS(TIME_TO_SEC(TIMEDIFF(t2_czas,t1.data_czas)))<60

    0
  • #5 23 Maj 2010 11:23
    ja_fryta
    Poziom 19  

    Nie działały te rozwiązania do końca dobrze a na ich podstawie udało mi się ułożyć swoje która działa bez zarzutu.
    Dziękuje za pomoc.

    0