![]() |
SQL-Frage (MySQL)
huhu leute!
ich hab da ein kleines problem, mit dem ich nicht zurecht komme, und hoffe auf eure hilfe. ich habe eine tabelle, in der stehen u.a. die folgenden felder: - id - userid - startdate als int (unix-timestamp) - enddate als int (unix-timestamp) zu einer person werden zeiten erfasst, d.h. von wann bis wann sie eingeloggt war bzw. ist. wenn sie gerade eingeloggt ist, befindet sich im letzten eintrag bei enddate ein NULL-wert. jetzt will ich mit einem query rausfinden, was der letzte eingetragene datensatz ist, d.h. jener mit dem grössten startdate-timestamp und den dazu korresponierenden enddate-timestamp. das problem ist, dass letzterer auch NULL sein kann (wenn der user eben noch eingeloggt ist). ich hoffe, ich habe das problem halbwegs verständlich beschrieben und dass mir jemand helfen kann. danke im voraus ;) |
Hallo!
Warum machst Du nicht ein SELECT MAX auf die Startdate? Wenn NULL drinnensteht kannst Du ja nen String á la "Ist noch angemeldet" ausgeben, oder versteh ich Dich falsch? LG Jörg |
wenn ich das ganze richtig verstanden hab, könnte die abfrage so aussehen:
select id from tabelle order by startdate desc limit 0,1 = sortiert die tabelle absteigend noch startdate und gibt dir die id des datensatzes |
Re: SQL-Frage (MySQL)
Zitat:
~ |
Und was ist das Problem bei der Abfrage?
|
ok, ich versuchs nochmal:
in der tabelle stehen von vielen usern jeweils viele login-daten. ich will zu jeder person den zugehörigen letzten record ausfindig machen (kein problem mit max(startdate) und group by personid). jedoch bräuchte ich dann zum startdate das zugehörige enddate und nicht irgendeines, sondern eben jenes das bei dem maximalen startdate drinnen steht. weil wenn dieses enddate NULL ist, dann weiss ich ob der user angeloggt ist oder nicht. z.b. select personid, max(startdate), enddate from table group by personid es soll dabei rauskommen: person 1 mit letztem login um xxx und logout um xxx (oder eben NULL) |
ja und? kommt das nicht raus?
Was ist Dein Problem? |
Zitat:
also z.b. ... person 1 startdate 1 enddate 1 person 1 startdate 2 enddate 2 person 1 startdate 3 enddate 3 (letzter eintrag person 1) ... weitere personen ... der query liefert als ergebnis: person 1 startdate 3 enddate 1 (!!!) ich will aber enddate 3 |
Code:
select personid, max(startdate), enddate |
vielen dank für deine antwort _m3!
leider funktioniert dein vorschlag mal prinzipiell nicht, weil eine aggregatsfunktion wie max nur in einem select mit gruppierung vorkommen darf, wenn noch andere feldwerte ausgelesen werden. zudem würde ich eine übersicht über alle personen benötigen, in dem sinn: personid - letztes einlogdatum - dazugehöriges auslogatum personid - letztes einlogdatum - dazugehöriges auslogatum personid - letztes einlogdatum - dazugehöriges auslogatum ... |
Alle Zeitangaben in WEZ +2. Es ist jetzt 14:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag