Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Sprawdzanie maksymalnej długości kolejnych dni, które spełniają określony warunek

To rozwiązanie wydaje się działać całkiem dobrze, o ile istnieje złożony indeks dla users_id i 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:duży VARCHAR kontra TEXT?

  2. Jak przechowywać dane z dynamiczną liczbą atrybutów w bazie danych

  3. Mysql nie uruchamia się - ibdata1 jest uszkodzony? - błąd systemu operacyjnego numer 13 - problem z uprawnieniami

  4. Podstawy systemu „zapamiętaj mnie”

  5. SQL Pokaż najnowszy rekord w GROUP BY?