Anzeige

SQL Abfrage

SQL Abfrage | PSD-Tutorials.de

Erstellt von AxelM, 20.04.2016.

  1. AxelM

    AxelM Nicht mehr ganz neu hier

    Dabei seit:
    22.10.2011
    Beiträge:
    180
    Geschlecht:
    männlich
    SQL Abfrage
    Hallo,
    ich habe in einer Tabelle folgendes gespeichert:
    user_id (BIGINT) //Benutzer id
    ts (BIGINT) // Unix Timestamp aus time()
    typ (TINYINT) // 1 für "rein" und 0 für "raus"

    was ich brauche sind nun alle Zeitspannen zwischen typ = 1 und dem nächsten typ = 1 nach Sortierung ts ASC.
    Am liebsten wäre mir folgende Rückgabe:
    user_id, ts des in , Zeitspanne in Sekunden

    Geht sowas per SQL? falls ja, wie?

    Danke schonmal für eure Antworten.
     
    #1      
  2. Duddle

    Duddle Posting-Frequenz: 14µHz

    Dabei seit:
    03.02.2006
    Beiträge:
    3.864
    Geschlecht:
    männlich
    Ort:
    Dresden
    SQL Abfrage
    Hab mal ein bisschen rumgespielt und ein Zwischenergebnis hinbekommen, dass wohl den schwierigeren Teil löst. http://sqlfiddle.com/#!9/298602/3

    Man braucht dazu eine zusätzliche, eindeutige id, dann kann per GROUP BY aus einer Menge an Zeitspannen jeweils die kleinste rausgepickt werden.


    Duddle
     
    #2      
  3. p3t6

    p3t6 Noch nicht viel geschrieben

    Dabei seit:
    26.01.2008
    Beiträge:
    34
    Geschlecht:
    männlich
    SQL Abfrage
    Hallo. ZUerst einmal eine Frage, warum nimmst du für einen UNIX Timestamp ein bigint Feld? Woe wäre es mit Timestamp?
     
    #3      
  4. JHotography

    JHotography Noch nicht viel geschrieben Kreativ-Flatrate-User

    Dabei seit:
    23.04.2016
    Beiträge:
    5
    SQL Abfrage
    Ich meine, das müsste mit einem JOIN auf die gleiche Tabelle funktionieren, in etwa so:

    SELECT tab1.user__id, tab1.ts, tab2.ts - tab1.ts
    FROM tabelle AS tab1, tabelle AS tab2
    WHERE tab2.user__id = tab1.user__id
    AND tab2.typ = 1
    AND tab2.ts =
    (SELECT min(ts) FROM tabelle WHERE user__id = tab1.user_id AND typ = 1 AND ts > tab1.ts)

    Das ist zugegebenermaßen zwar nicht besonders performant, sollte aber ohne weitere Modifikationen der Tabellenstruktur funktionieren, wenn ich mich nicht irre?

    Liebe Grüße

    Jens
     
    #4      
  5. msa1989

    msa1989 Bin da

    Dabei seit:
    24.11.2007
    Beiträge:
    161
    Geschlecht:
    männlich
    SQL Abfrage
    Hallo @AxelM

    um welche Datenbank handelt es sich denn? Weil wenn es z.B. SQL Server oder postgreSQL ist, gibt es sogenannte "Window Functions". Damit kann das direkt in einer Zeile berechnet werden. MySQL kennt allerdings meines Wisssens nach keine Window Functions.
    Die Methode von Jens sollte auf jeden Fall funktionieren (Code nicht nachgeprüft) liefert aber wie er schreibt nicht die beste Performance. Aber ich gehe jetzt mal davon aus, dass du das für eine kleine Datenbanken brauchst (< 500 MB?). Dann hast du vermutlich sowieso keine Probleme mit der Performance und genügend Kapazität übrig.
     
    #5      
  6. Duddle

    Duddle Posting-Frequenz: 14µHz

    Dabei seit:
    03.02.2006
    Beiträge:
    3.864
    Geschlecht:
    männlich
    Ort:
    Dresden
    SQL Abfrage
    Der Thread ist 1 Jahr alt und damit sicher nicht mehr relevant.


    Duddle
     
    #6      
x
×
×