Come elencare i record con la data degli ultimi 10 giorni?


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

Funziona su PostgreSQL?

Risposte:


192

Sì, funziona in PostgreSQL (supponendo che la colonna " data " sia di tipo di dati date) Perché non lo provi?

Il formato standard ANSI SQL sarebbe:

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

Preferisco quel formato in quanto rende le cose più facili da leggere (ma è lo stesso di current_date - 10).


1
La query dovrebbe essere: SELECT Table.date FROM Table WHERE date> current_date - intervallo '10 giorni ';
user2694306

4
@ user2694306: interval '10 day'è la sintassi di Postgres. interval '10' dayè la sintassi basata sullo standard SQL e supportata anche da Postgres
a_horse_with_no_name

1
l'intervallo dovrebbe essere 9 . 10 in realtà ti dà 11 giorni indietro da oggi.
David He

1
@DavidHe: questo fa la stessa cosa della risposta originale. Che utilizza 10, non9
a_horse_with_no_name

3
Solo una nota: su Redshift, la formulazione di @ user2694306 funziona: intervallo "10 giorni". l'intervallo '10' giorno non funziona su Redshift.
Ben


9

La mia comprensione dal mio test (e dalla dox di PostgreSQL ) è che le virgolette devono essere fatte in modo diverso dalle altre risposte e dovrebbero includere anche "giorno" come questo:

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

Dimostrato qui (dovresti essere in grado di eseguirlo su qualsiasi db Postgres):

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

Risultato:

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

In realtà, non ho notato che la risposta di Bradley aveva ragione. Ad ogni modo, lascio il mio qui come prova che è il modo corretto. La risposta accettata è sbagliata (almeno per la versione di Postgre che sto utilizzando)
Altamente irregolare

0

Vorrei controllare i tipi di dati.

current_date ha il tipo di dati "date", 10 è un numero e Table.date - devi guardare la tua tabella.


0

puoi usare anche tra:

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

La betweendeve essere con il valore più basso prima, quindi questo sarebbe stato fatto correttamente come SELECT Table.date FROM Table WHERE date between current_date - interval '10 day' and current_date;
Tipo

0

Basta generalizzare la query se si desidera lavorare con una determinata data anziché con la data corrente:

SELECT Table.date
  FROM Table 
  WHERE Table.date > '2020-01-01'::date - interval '10 day'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.