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

những ngày liên tiếp trong sql

Đây là giải pháp của tôi cho vấn đề này bằng cách sử dụng CTE

WITH RECURSIVE CTE(attendanceDate)
AS
(
   SELECT * FROM 
   (
      SELECT attendanceDate FROM attendance WHERE attendanceDate = current_date 
      OR attendanceDate = current_date - INTERVAL '1 day' 
      ORDER BY attendanceDate DESC
      LIMIT 1
   ) tab
   UNION ALL

   SELECT a.attendanceDate  FROM attendance a
   INNER JOIN CTE c
   ON a.attendanceDate = c.attendanceDate - INTERVAL '1 day'
) 
SELECT COUNT(*) FROM CTE;

Kiểm tra mã tại SQL Fiddle

Đây là cách truy vấn hoạt động:

  1. Nó chọn bản ghi của ngày hôm nay từ attendance bàn. Nếu bản ghi của ngày hôm nay không có sẵn thì nó sẽ chọn bản ghi của ngày hôm qua
  2. Sau đó, nó tiếp tục thêm bản ghi đệ quy một ngày trước ngày ít nhất

Nếu bạn muốn chọn phạm vi ngày liên tiếp mới nhất bất kể lần tham dự gần đây nhất của người dùng là khi nào (hôm nay, hôm qua hoặc x ngày trước), thì phần khởi tạo của CTE phải được thay thế bằng đoạn mã dưới đây:

SELECT MAX(attendanceDate) FROM attendance

[EDIT] Đây là truy vấn tại SQL Fiddle giải quyết câu hỏi số 1 của bạn: SQL Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa hai ngày postgresql Trong định dạng Excel

  2. Tại sao không thể tạo bảng phân vùng

  3. Làm cách nào để sao lưu cơ sở dữ liệu Postgres trong Kubernetes trên Google Cloud?

  4. Tìm tất cả các bảng phân vùng kế thừa từ bảng chính

  5. PostgreSQL - đặt giá trị ô mặc định theo giá trị ô khác