PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

sql . में लगातार दिन

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 पर कोड की जांच करें

यहां बताया गया है कि क्वेरी कैसे काम कर रही है:

  1. यह attendance . से आज के रिकॉर्ड का चयन करता है मेज़। अगर आज का रिकॉर्ड उपलब्ध नहीं है तो वह कल के रिकॉर्ड का चयन करता है
  2. फिर यह न्यूनतम तिथि से एक दिन पहले पुनरावर्ती रिकॉर्ड जोड़ता रहता है

यदि आप नवीनतम लगातार दिनांक सीमा का चयन करना चाहते हैं, भले ही उपयोगकर्ता की नवीनतम उपस्थिति (आज, कल या x दिन पहले) हो, तो सीटीई के आरंभीकरण भाग को नीचे दिए गए स्निपेट से बदला जाना चाहिए:

SELECT MAX(attendanceDate) FROM attendance

[संपादित करें] यहां SQL Fiddle पर क्वेरी है जो आपके प्रश्न#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. ओडू में कई 2 कई फ़ील्ड जोड़ने के बाद संबंध पहले से मौजूद है

  2. PostgreSQL - अलग-अलग समय क्षेत्र में दिनांक कैसे प्रस्तुत करें?

  3. क्वेरी कुंजी की परवाह किए बिना मान के आधार पर jsonb को पोस्टग्रेज करती है

  4. PHP से पूछे जाने पर दृश्य के अंदर Postgresql regexp_matches हमेशा शून्य लौटाता है

  5. जब कोई py.test चुपचाप लटक जाए तो क्या करें?