WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   SQL-Frage (MySQL) (http://www.wcm.at/forum/showthread.php?t=111196)

pc.net 06.10.2003 20:09

warum machst kein sub-select?
Code:

select t1.personid,
      t1.startdate,
      t1.enddate
from table t1
where t1.startdate = (select max(t2.startdate)
                      from table t2
                      where t2.personid = t1.personid)


Gonte 06.10.2003 20:14

leider befindet sich die mysql 4.1 noch in der alpha version (wodurch leider kein produktiv-einsatz möglich ist) und erst ab dieser version sind sub-selects möglich.

ich warte auf die 4.1er eh schon wie auf das christkindl :D

snowman 06.10.2003 21:39

Zitat:

Original geschrieben von dreamer
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

und das geht nicht?

select personid, startdate, enddate from tabelle order by startdate desc limit 0,1

gruss,
snowman

jonix 06.10.2003 21:43

und folgendes geht auch net?
PHP-Code:

mysqlSELECT useridMAX(startdate), enddate
    
->        FROM table
    
->        GROUP BY userid 

da sollt doch nix dagegen sprechen oder?

Gonte 07.10.2003 08:35

vielen dank für eure antworten!

@snowman: dein vorschlag würde funktionieren, wenn ich nur eine person bräuchte, jedoch hätte ich gerne eine gruppierung nach personen, um eine online-liste aller personen zu erhalten.

@jonix: genau dieser query ist mein ausgangspunkt. jedoch erhalte ich bei diesem query als ergebnis NICHT das zum maximalen startdate korrespondierende enddate (d.h. jenes das im selben record steht), sondern einfach das des allerersten records, der zu dieser person in die datenbank eingefügt wurde. (worin ja genau mein problem besteht, da ich das korrespondierende enddate bräuchte)

snowman 07.10.2003 09:12

Zitat:

Original geschrieben von Gonte
@snowman: dein vorschlag würde funktionieren, wenn ich nur eine person bräuchte, jedoch hätte ich gerne eine gruppierung nach personen, um eine online-liste aller personen zu erhalten.
select personid, startdate, enddate from tabelle where enddate = 0 order by startdate desc

gruss,
snowman

jonix 07.10.2003 10:16

ok, jetzt versteh ich, sorry :-) ich versuchs nochmal:
PHP-Code:

SELECT userid,
       
SUBSTRINGMAXCONCAT(LPAD(starttime,10,'0'),endtime) ), 11) AS endtime,
       
0.00+LEFTMAXCONCAT(LPAD(starttime,10,'0'),endtime) ), 10) AS starttime
FROM   
`tabelle`
GROUP BY userid

streng nach vorschrift auf http://www.mysql.com/doc/en/example-...group-row.html

Gonte 07.10.2003 12:52

!!!!!!! ;)

very nice jonix & big thankx! das bringt mich einer lösung schon sehr sehr nahe! :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag