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:
- Ini memilih catatan hari ini dari
attendance
meja. Jika catatan hari ini tidak tersedia maka akan memilih catatan kemarin - 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