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;
SQLFiddle でコードを確認してください
クエリの動作は次のとおりです。
attendance
から今日のレコードを選択します テーブル。今日のレコードが利用できない場合は、昨日のレコードが選択されます- その後、最小日の1日前に再帰的にレコードを追加し続けます
ユーザーの最新の出席時刻(今日、昨日、またはx日前)に関係なく、最新の連続する日付範囲を選択する場合は、CTEの初期化部分を以下のスニペットに置き換える必要があります。
SELECT MAX(attendanceDate) FROM attendance
[編集]これがあなたの質問を解決するSQLフィドルでのクエリです#1: SQL Fiddle