Jak wymienić rekordy z datą z ostatnich 10 dni?


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

Czy to działa na PostgreSQL?

Odpowiedzi:


191

Tak, to działa w PostgreSQL (zakładając, że kolumna " date " jest typu danych date) Dlaczego po prostu tego nie wypróbujesz?

Standardowy format ANSI SQL to:

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

Wolę ten format, ponieważ ułatwia czytanie (ale jest taki sam jak current_date - 10).


1
Zapytanie powinno wyglądać następująco: SELECT Table.date FROM Table WHERE data> current_date - interwał '10 day ';
user2694306

4
@ user2694306: interval '10 day'to składnia Postgres. interval '10' dayjest składnią opartą na standardzie SQL, a także obsługiwaną przez Postgres
a_horse_with_no_name

1
interwał powinien wynosić 9 . 10 faktycznie daje 11 dni wstecz od dzisiaj.
David He

1
@DavidHe: robi to samo, co oryginalna odpowiedź. Który używa 10, a nie9
a_horse_with_no_name

3
Tylko uwaga: przy przesunięciu ku czerwieni formuła @ user2694306 działa: interwał „10 dni”. interwał „10” dzień nie działa na Przesunięciu ku czerwieni.
Ben


9

Z moich testów (i dox PostgreSQL ) rozumiem, że cytaty muszą być wykonane inaczej niż inne odpowiedzi, a także powinny zawierać „dzień” w następujący sposób:

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

Zademonstrowano tutaj (powinieneś być w stanie uruchomić to na dowolnej bazie danych Postgres):

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

Wynik:

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

Właściwie nie zauważyłem, że odpowiedź Bradleya jest poprawna. W każdym razie, zostawię tutaj swój jako dowód, że to właściwy sposób. Przyjęta odpowiedź jest nieprawidłowa (przynajmniej dla wersji Postgre, którą uruchamiam)
Wysoce nieregularne

0

Sprawdziłbym typy danych.

current_date ma typ danych "date", 10 to liczba, a Table.date - musisz spojrzeć na swoją tabelę.


0

możesz użyć między też:

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

betweenMusi być o najniższej wartości pierwszy, więc to będzie poprawnie wykonane jako SELECT Table.date FROM Table WHERE date between current_date - interval '10 day' and current_date;
typ

0

Po prostu uogólniając zapytanie, jeśli chcesz pracować z dowolną datą zamiast aktualnej daty:

SELECT Table.date
  FROM Table 
  WHERE Table.date > '2020-01-01'::date - interval '10 day'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.