sql >> Databáze >  >> RDS >> Mysql

Kontrola maximální délky po sobě jdoucích dnů, které splňují konkrétní podmínku

Zdá se, že toto řešení funguje docela dobře, pokud existuje složený index pro users_id a drinks_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. Skriptování přes ssh přes putty na windows

  2. Dlouhé celé číslo je transformováno, když je vloženo do kratšího sloupce, není zkráceno. Proč? jaký je vzorec?

  3. Jak předám hodnotu parametru uložené procedury v komponentě Zdroj OLE DB?

  4. Opravy související s výkonem pro SQL Server 2012