Seite 1 von 1
Datensätze abfragen, die älter als $INTERVALL sind
Verfasst: Do 25. Apr 2013, 17:34
von scientific
Hi!
Ich setze bei jeder Änderung eines Datensatzes einen neuen Timestamp in das Feld "Timestamp".
Wenn ich dann die Datenbank abfrage, möchte ich nur Datensätze ausgegeben haben, die älter als $INTERVALL also z.B. 2 Stunden sind.
Ich bin leider nicht so gut in SQL und hab keine Ahnung, wie ich das realisieren soll...
SELECT * FROM "Tabelle" WHERE "Timestamp" > now() - 2 HOURS
so in etwa hab ich mir das vorgestellt. Aber ich komm nicht zur Lösung... Eines hab ich rausgefunden: So geht es nicht.
Wie kann ich so eine Abfrage richtig machen?
lg scientific
Re: Datensätze abfragen, die älter als $INTERVALL sind
Verfasst: Do 25. Apr 2013, 19:52
von F3K Total
Moin,
das geht z.B so
Code: Alles auswählen
SELECT * FROM "Tabelle" where DATEDIFF('mi',"Timestamp",CURRENT_TIMESTAMP) > 120
für Minuten, sonst gibt es noch:
Code: Alles auswählen
'yy' -> Jahre
'mm' -> Monate
'dd' -> Tage
'hh' -> Stunden
'mi' -> Minuten
'ss' -> Sekunden
'ms' -> Millisekunden
Gruß R
Re: Datensätze abfragen, die älter als $INTERVALL sind
Verfasst: Fr 26. Apr 2013, 02:13
von scientific
vielen Danke!!!
lg scientific
Re: Datensätze abfragen, die älter als $INTERVALL sind
Verfasst: Fr 26. Apr 2013, 11:47
von scientific
Und dann noch eine Frage... irgendwie finde ich dazu auch nix brauchbares...
Wie schreibe ich geschachtelte bzw. logisch verknüpfte Abfragen in SQL?
SELECT * FROM "Tabelle1"
WHERE "Abschlussgrund" = 'WV' AND
"Wiedervorlage" < NOW( )
OR ("Abschlussgrund" = 'NE' AND DATEDIFF( 'mi', "Timestamp", CURRENT_TIMESTAMP ) > 120 )
OR "Abschlussgrund" IS NULL
OR "Abschlussgrund" LIKE ''
ORDER BY "Abschlussgrund" DESC, "Wiedervorlage" ASC
So funktioniert das nicht.
Ich würde gerne alle Datensätze mit "Abschlussgrund" = 'NE' ausgeben, welche aber älter als 2 Stunden sind. Ebenso alle die ein leeres Feld "Abschlussgrund" und jene die "WV" als Abschlussgrund haben...
wie mache ich das richtig?
lg scientific
Re: Datensätze abfragen, die älter als $INTERVALL sind
Verfasst: Fr 26. Apr 2013, 17:00
von RobertG
Hallo scientific,
scientific hat geschrieben:
Wie schreibe ich geschachtelte bzw. logisch verknüpfte Abfragen in SQL?
Code: Alles auswählen
SELECT * FROM "Tabelle1"
WHERE "Abschlussgrund" = 'WV' AND
"Wiedervorlage" < NOW( )
OR ("Abschlussgrund" = 'NE' AND DATEDIFF( 'mi', "Timestamp", CURRENT_TIMESTAMP ) > 120 )
OR "Abschlussgrund" IS NULL
OR "Abschlussgrund" LIKE ''
ORDER BY "Abschlussgrund" DESC, "Wiedervorlage" ASC
So funktioniert das nicht.
Ich würde gerne alle Datensätze mit "Abschlussgrund" = 'NE' ausgeben, welche aber älter als 2 Stunden sind.
Code: Alles auswählen
SELECT * FROM "Tabelle1"
WHERE ("Abschlussgrund" = 'NE' AND DATEDIFF( 'mi', "Timestamp", CURRENT_TIMESTAMP ) > 120 )
ORDER BY "Abschlussgrund" DESC, "Wiedervorlage" ASC
scientific hat geschrieben:
Ebenso alle die ein leeres Feld "Abschlussgrund"
Code: Alles auswählen
SELECT * FROM "Tabelle1"
WHERE ("Abschlussgrund" = 'NE' AND DATEDIFF( 'mi', "Timestamp", CURRENT_TIMESTAMP ) > 120 )
OR "Abschlussgrund" IS NULL
ORDER BY "Abschlussgrund" DESC, "Wiedervorlage" ASC
scientific hat geschrieben:
und jene die "WV" als Abschlussgrund haben...
Code: Alles auswählen
SELECT * FROM "Tabelle1"
WHERE "Abschlussgrund" = 'WV'
OR ("Abschlussgrund" = 'NE' AND DATEDIFF( 'mi', "Timestamp", CURRENT_TIMESTAMP ) > 120 )
OR "Abschlussgrund" IS NULL
ORDER BY "Abschlussgrund" DESC, "Wiedervorlage" ASC
Das bildet jetzt Deine Anforderungen ab. Was Dabei "Abschlussgrund" Like " soll bleibt mir schleierhaft. "Wiedervorlage" < NOW() hast Du auch nicht in Deinen Forderungen aufgelistet. Soll das nur für 'WV' gelten oder soll das für alle Teilbereiche gelten? Je nachdem musst Du die Bedingungen in Klammern zusammenfassen.
Vielleicht solltest Du wirklich einmal das Base-Handbuch zu Hilfe nehmen:
http://de.libreoffice.org/hilfe-kontakt/handbuecher/ - etwas nach unten scrollen.
Gruß
Robert