Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Befehl: erster und letzter Datensatz (https://www.delphipraxis.net/142416-sql-befehl-erster-und-letzter-datensatz.html)

Angel4585 27. Okt 2009 20:10

Datenbank: MySQL • Version: 5 • Zugriff über: PHP

SQL Befehl: erster und letzter Datensatz
 
Hallo,

ich habe zwei Tabellen tab_users und tab_values.

In tab_users stehen Benutzerdaten drin wie zB uid und nickname.
In tab_values stehen werte zu den Benutzern drin welche stündlich eingetragen werden, das ganze mit nem zeitstempel.

Jetzt möchte ich mir den ersten und den letzten Datensatz zu jedem Benutzer innerhalb eines Zeitraumes ausgeben lassen.
Wie sollte da am besten das Statement aussehen?

Bisher hab ich nur das:

SQL-Code:
select * from tab_values where statetime>=$anfang and statetime <=$ende order by uid
Also noch keinerlei Filter bzgl erster und letzter DS des Zeitraums.
Irgendwie muss das doch bestimmt mit den min und max Aggregatfunktionen gehen oder?

Ich komm irgendwie nich drauf :gruebel:

mkinzler 27. Okt 2009 20:12

Re: SQL Befehl: erster und letzter Datensatz
 
min(starttime) und max(starttime)

Angel4585 27. Okt 2009 20:20

Re: SQL Befehl: erster und letzter Datensatz
 
ja schon, aber wie bring ich das im statement unter damit auch nur die beiden ds angezeigt werden?

mkinzler 27. Okt 2009 20:26

Re: SQL Befehl: erster und letzter Datensatz
 
Eine Union könnte auch helfen
SQL-Code:
  select
    * 
  from
    tab_values where statetime>=$anfang and statetime <=$ende
  group by
    uid
  order by
    starttime asc limit 1
union
  select
    * 
  from
    tab_values where statetime>=$anfang and statetime <=$ende
    group by
    uid
  order by
    starttime desc limit 1;

omata 27. Okt 2009 21:26

Re: SQL Befehl: erster und letzter Datensatz
 
Das geht auch schicker...

SQL-Code:
SELECT *
FROM tab_users u
INNER JOIN tab_values v
  ON u.uid = v.uid
WHERE statetime BETWEEN :anfang AND :ende
  AND (    statetime = (SELECT MIN(statetime)
                        FROM tab_values
                        WHERE uid = u.uid
                          AND statetime BETWEEN :anfang AND :ende)
        OR statetime = (SELECT MAX(statetime)
                        FROM tab_values
                        WHERE uid = u.uid
                          AND statetime BETWEEN :anfang AND :ende))


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz