PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

hari berturut-turut di sql

Inilah solusi saya untuk masalah ini menggunakan 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;

Periksa kode di SQL Fiddle

Inilah cara kerja kueri:

  1. Ini memilih catatan hari ini dari attendance meja. Jika catatan hari ini tidak tersedia maka akan memilih catatan kemarin
  2. Ini kemudian terus menambahkan catatan rekursif sehari sebelum tanggal paling sedikit

Jika Anda ingin memilih rentang tanggal terbaru berturut-turut terlepas dari kapan kehadiran terakhir pengguna (hari ini, kemarin atau x hari sebelumnya), maka bagian inisialisasi CTE harus diganti dengan cuplikan di bawah ini:

SELECT MAX(attendanceDate) FROM attendance

[EDIT]Ini adalah kueri di SQL Fiddle yang menyelesaikan pertanyaan Anda #1: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. Filter nama kolom dari tabel yang ada untuk pernyataan SQL DDL

  2. Bagaimana cara melepaskan kemungkinan kunci baris Postgres?

  3. Java Crosstab - kueri pernyataan yang disiapkan

  4. fungsi month() dan fungsi year() di postgresql melalui jpa2

  5. Metode Konversi. Metode yang ditentukan pada tipe tidak dapat diterjemahkan ke dalam ekspresi penyimpanan LINQ ke Entitas