sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL Query om gegevens van vorige week te selecteren?

Deze toestand retourneert records van zondag tot en met zaterdag vorige week:

WHERE created BETWEEN
    NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-7 
    AND NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER

Er is een voorbeeld:

WITH compras AS (
    SELECT ( NOW() + (s::TEXT || ' day')::INTERVAL )::TIMESTAMP(0) AS created
    FROM generate_series(-20, 20, 1) AS s
)
SELECT to_char( created, 'DY'::TEXT), created
FROM compras
WHERE created BETWEEN
    NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-7 
    AND NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER

In antwoord op @d456:

Dat klopt, BETWEEN omvat middernacht op zondag aan beide uiteinden van de pauze. Om middernacht op zondag aan het einde van het interval uit te sluiten, is het noodzakelijk om operators >= . te gebruiken en < :

WITH compras AS (
    SELECT s as created
    FROM generate_series( -- this would produce timestamps with 20 minutes step
             (now() - '20 days'::interval)::date,
             (now() + '20 days'::interval)::date,
             '20 minutes'::interval) AS s
)
SELECT to_char( created, 'DY'::TEXT), created
FROM compras
WHERE TRUE
    AND created >= NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-7
    AND created <  NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER


  1. Inhoud van een gegevenstabel afdrukken

  2. Problemen met het maken van een trigger met Oracle

  3. Hoe date_part() werkt in PostgreSQL

  4. Postgres - Retourfout bij update als record niet gevonden