sql >> Databáze >  >> RDS >> PostgreSQL

po sobě jdoucích dnů v sql

Zde je moje řešení tohoto problému pomocí 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;

Zkontrolujte kód na SQL Fiddle

Dotaz funguje následovně:

  1. Vybere dnešní záznam z attendance stůl. Pokud dnešní záznam není dostupný, vybere se včerejší záznam
  2. Pak pokračuje v přidávání rekurzivních záznamů den před datem nejmenšího data

Pokud chcete vybrat poslední po sobě jdoucí časové období bez ohledu na to, kdy byla poslední návštěva uživatele (dnes, včera nebo x dní předtím), musí být inicializační část CTE nahrazena níže uvedeným úryvkem:

SELECT MAX(attendanceDate) FROM attendance

[EDIT]Zde je dotaz na SQL Fiddle, který řeší vaši otázku č. 1:SQL Fiddle



  1. Jak používat MySQL DECIMAL?

  2. 4 způsoby formátování čísla bez desetinných míst v Oracle

  3. Vytiskněte data v ResultSet spolu s názvy sloupců

  4. Kvalita dat a fuzzy vyhledávání