sql >> Databasteknik >  >> RDS >> Mysql

Kontrollera för maximal längd av på varandra följande dagar som uppfyller specifika villkor

Den här lösningen verkar fungera ganska bra så länge det finns ett sammansatt index på users_id och beverages_id -

SELECT *
FROM (
    SELECT t.*, IF(@prev + INTERVAL 1 DAY = t.d, @c := @c + 1, @c := 1) AS streak, @prev := t.d
    FROM (
        SELECT DATE(timestamp) AS d, COUNT(*) AS n
        FROM beverages_log
        WHERE users_id = 1
        AND beverages_id = 1
        GROUP BY DATE(timestamp)
        HAVING COUNT(*) >= 5
    ) AS t
    INNER JOIN (SELECT @prev := NULL, @c := 1) AS vars
) AS t
ORDER BY streak DESC LIMIT 1;


  1. Rangordna användare i mysql efter deras poäng

  2. COALESCE() Funktion i Oracle

  3. Använd FILEGROUP_ID() för att returnera en filgrupps ID i SQL Server

  4. Installera Oracle 32-bitars klient på Windows Server Kör redan 64-bitars Oracle Database Server