Wie liste ich Datensätze mit Datum der letzten 10 Tage auf?


101
SELECT Table.date FROM Table WHERE date > current_date - 10;

Funktioniert das unter PostgreSQL?

Antworten:


190

Ja, dies funktioniert in PostgreSQL (vorausgesetzt, die Spalte " Datum " ist vom Datentyp date). Warum versuchen Sie es nicht einfach?

Das Standard-ANSI-SQL-Format wäre:

SELECT Table.date 
FROM Table 
WHERE date > current_date - interval '10' day;

Ich bevorzuge dieses Format, da es das Lesen erleichtert (aber es ist dasselbe wie current_date - 10).


1
Die Abfrage sollte lauten: SELECT Table.date FROM Table WHERE Datum> aktuelles_Datum - Intervall '10 Tag ';
user2694306

4
@ user2694306: interval '10 day'ist die Postgres-Syntax. interval '10' dayist die Syntax, die auf dem SQL-Standard basiert und auch von Postgres unterstützt wird
a_horse_with_no_name

1
Intervall sollte 9 sein . 10 gibt Ihnen tatsächlich 11 Tage zurück von heute.
David He

1
@ DavidHe: Dies macht das gleiche wie die ursprüngliche Antwort. Was verwendet 10, nicht9
a_horse_with_no_name

3
Nur eine Anmerkung: Bei Redshift funktioniert die Formulierung von @ user2694306: Intervall '10 Tag '. Intervall '10' Tag funktioniert bei Redshift nicht.
Ben


9

Mein Verständnis aus meinen Tests (und dem PostgreSQL-Dox ) ist, dass die Anführungszeichen anders als die anderen Antworten gemacht werden müssen und auch "Tag" wie folgt enthalten sollten:

SELECT Table.date
  FROM Table 
  WHERE date > current_date - interval '10 day';

Hier demonstriert (Sie sollten dies auf jeder Postgres-Datenbank ausführen können):

SELECT DISTINCT current_date, 
                current_date - interval '10' day, 
                current_date - interval '10 days' 
  FROM pg_language;

Ergebnis:

2013-03-01  2013-03-01 00:00:00 2013-02-19 00:00:00

Eigentlich habe ich nicht bemerkt, dass Bradleys Antwort es richtig gemacht hat. Wie auch immer, ich werde meine hier lassen, um zu beweisen, dass es der richtige Weg ist. Die akzeptierte Antwort ist falsch (zumindest für die Version von Postgre, die ich verwende)
Sehr unregelmäßig

0

Ich würde Datentypen überprüfen.

current_date hat den Datentyp "date", 10 ist eine Zahl und Table.date - Sie müssen sich Ihre Tabelle ansehen.


0

Sie können auch zwischen verwenden:

SELECT Table.date
  FROM Table 
  WHERE date between current_date and current_date - interval '10 day';

Das betweenmuss zuerst mit dem niedrigsten Wert sein, damit dies korrekt gemacht wird als SELECT Table.date FROM Table WHERE date between current_date - interval '10 day' and current_date;
Typ
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.