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;
SQL Fiddle पर कोड की जांच करें
यहां बताया गया है कि क्वेरी कैसे काम कर रही है:
- यह
attendance
. से आज के रिकॉर्ड का चयन करता है मेज़। अगर आज का रिकॉर्ड उपलब्ध नहीं है तो वह कल के रिकॉर्ड का चयन करता है - फिर यह न्यूनतम तिथि से एक दिन पहले पुनरावर्ती रिकॉर्ड जोड़ता रहता है
यदि आप नवीनतम लगातार दिनांक सीमा का चयन करना चाहते हैं, भले ही उपयोगकर्ता की नवीनतम उपस्थिति (आज, कल या x दिन पहले) हो, तो सीटीई के आरंभीकरण भाग को नीचे दिए गए स्निपेट से बदला जाना चाहिए:
SELECT MAX(attendanceDate) FROM attendance
[संपादित करें] यहां SQL Fiddle पर क्वेरी है जो आपके प्रश्न#1 का समाधान करती है:SQL Fiddleए>