PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Truy vấn PostgreSQL để chọn dữ liệu từ tuần trước?

Điều kiện này sẽ trả lại hồ sơ từ Chủ Nhật đến Thứ Bảy tuần trước:

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

Có một ví dụ:

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

Trả lời cho @ d456:

Đúng vậy, BETWEEN bao gồm nửa đêm vào Chủ nhật ở cả hai đầu của khoảng thời gian. Để loại trừ nửa đêm Chủ nhật vào cuối khoảng thời gian, cần sử dụng toán tử >=< :

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dữ liệu không gian trong PostgreSQL

  2. câu hỏi về các biến liên kết postgresql

  3. Ngăn các chuỗi trống trong trường CHARACTER VARYING

  4. Vấn đề về Django DateRangeField

  5. Đặt Order By để bỏ qua dấu câu trên cơ sở mỗi cột