Letzte x Datensaetze?

Letzte x Datensaetze?

am 25.02.2007 22:59:35 von Sebastian Suchanek

Hallo NG!

Ich habe eine Datenbank, die "Ereignis"-Einträge u.a. mit
zugehörigem DATETIME-Feld enthält und aus der ich eine
Balkengrafik mit Ereignissen pro Tag erzeugen möchte. Dazu habe
ich folgende Abfrage:

SELECT DATE(datumsfeld) AS datum, COUNT(id) FROM tabelle
GROUP BY datum ORDER BY datum

Welche Möglichkeiten habe ich nun, die Abfrage auf *letzten* x
Tage zu beschränken?
- Ich könnte absteigend sortieren lassen mit "LIMIT x" und
die Reihenfolge auf Applikationsebne drehen.
- Dito, jedoch "Drehung" mit einer übergeordneten, zweiten
Query.
- Auf Applikationsebene vorher die Gesamtzahl n der enthaltenen
Tage ermitteln und dann die eigentliche Abfrage mit
"LIMIT n-x, x" ausführen.

Gibt es sonst noch Optionen, möglicherweise elegantere?
Falls nein, welche der o.g. Lösungen würdet Ihr bevorzugen und
warum?


TIA,

Sebastian

PS: mySQL liegt in Version 4.1 vor.

--
http://www.baumaschinen-modelle.net
http://www.schwerlast-rhein-main.de

Re: Letzte x Datensaetze?

am 25.02.2007 23:14:08 von Udo Neist

Sebastian Suchanek wrote:

> Hallo NG!
>
> Ich habe eine Datenbank, die "Ereignis"-Einträge u.a. mit
> zugehörigem DATETIME-Feld enthält und aus der ich eine
> Balkengrafik mit Ereignissen pro Tag erzeugen möchte. Dazu habe
> ich folgende Abfrage:
>
> SELECT DATE(datumsfeld) AS datum, COUNT(id) FROM tabelle
> GROUP BY datum ORDER BY datum
>
> Welche Möglichkeiten habe ich nun, die Abfrage auf *letzten* x
> Tage zu beschränken?

Absteigend sortieren.

SELECT DATE(datumsfeld) AS datum, COUNT(id) FROM tabelle GROUP BY
datum ORDER BY datum DESC LIMIT X

Gruß
Udo

Re: Letzte x Datensaetze?

am 26.02.2007 12:24:50 von Johannes Vogel

Hi Sebastian

Sebastian Suchanek wrote:
> Ich habe eine Datenbank, die "Ereignis"-Einträge u.a. mit
> zugehörigem DATETIME-Feld enthält und aus der ich eine
> Balkengrafik mit Ereignissen pro Tag erzeugen möchte. Dazu habe
> ich folgende Abfrage:
>
> SELECT DATE(datumsfeld) AS datum, COUNT(id) FROM tabelle
> GROUP BY datum ORDER BY datum
>
> Welche Möglichkeiten habe ich nun, die Abfrage auf *letzten* x
> Tage zu beschränken?
> - Ich könnte absteigend sortieren lassen mit "LIMIT x" und
> die Reihenfolge auf Applikationsebne drehen.
> - Dito, jedoch "Drehung" mit einer übergeordneten, zweiten
> Query.

Diese hier:
select datum, anzahl from (
SELECT DATE(datumsfeld) AS datum, COUNT(id) anzahl FROM tabelle
GROUP BY datum ORDER BY datum desc limit 10) as a
order by datum asc;

Sofern du nicht einfach das Neueste als erstes haben willst. Denn das
sind oft die wichtigsten Einträge, weshalb sie auch als ergonomisch als
erstes aufgelistet werden sollten. Kommt oft dazu, dass man für den
neusten Eintrag auch nicht scrollen müssen soll.

> - Auf Applikationsebene vorher die Gesamtzahl n der enthaltenen
> Tage ermitteln und dann die eigentliche Abfrage mit
> "LIMIT n-x, x" ausführen.
> Gibt es sonst noch Optionen, möglicherweise elegantere?
> Falls nein, welche der o.g. Lösungen würdet Ihr bevorzugen und
> warum?

Mit fällt grad nichts ein.
HTH, Johannes