sql >> Database >  >> RDS >> PostgreSQL

opeenvolgende dagen in sql

Hier is mijn oplossing voor dit probleem met behulp van 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;

Controleer de code op SQL Fiddle

Hier is hoe de query werkt:

  1. Het selecteert het record van vandaag uit attendance tafel. Als het record van vandaag niet beschikbaar is, wordt het record van gisteren geselecteerd
  2. Het blijft dan een dag voor de minste datum recursief een record toevoegen

Als u de laatste opeenvolgende periode wilt selecteren, ongeacht wanneer de laatste aanwezigheid van de gebruiker was (vandaag, gisteren of x dagen ervoor), dan moet het initialisatiegedeelte van CTE worden vervangen door onderstaand fragment:

SELECT MAX(attendanceDate) FROM attendance

[EDIT]Hier is een query op SQL Fiddle die uw vraag #1 oplost:SQL Fiddle



  1. Hoe vind ik de MySQL my.cnf-locatie

  2. Retourneert slechts één rij van de meest rechtse tabel voor elke rij in de meest linkse tabel

  3. Opmerkingen over het ontwerpprobleem van veel tabellen met databases

  4. Krijg een specifiek antwoord van MySql in jQuery AJAX Success