sql >> Database teknologi >  >> RDS >> Mysql

Kontrollerer for maksimal længde af på hinanden følgende dage, som opfylder specifikke betingelser

Denne løsning ser ud til at fungere ret godt, så længe der er et sammensat indeks på users_id og 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. PostgreSQL, træk og skift

  2. Fejl #2002 Kan ikke oprette forbindelse til lokal MySQL-server gennem socket '/Applications/MAMP/tmp/mysql/mysql.sock' (2)

  3. Sådan bruges egenskaben IDENTITY() i SQL Server

  4. BIT(1) eller TINYINT for flag i MySQL