Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да запълним празнините в датата в MySQL?

Ще трябва да създадете помощна таблица и да я попълните с всички дати от start до end , след това просто LEFT JOIN с тази таблица:

SELECT  d.dt AS date,
        COUNT(*) AS total,
        SUM(attitude = 'positive') AS positive,
        SUM(attitude = 'neutral') AS neutral,
        SUM(attitude = 'negative') AS negative
FROM    dates d
LEFT JOIN
        messages m
ON      m.posted_at >= d.dt
        AND m.posted_at < d.dt + INTERVAL 1 DAYS
        AND spam = 0
        AND duplicate = 0
        AND ignore = 0
GROUP BY
        d.dt
ORDER BY
        d.dt

По принцип това, от което се нуждаете тук, е фиктивен източник на ред.

MySQL е единствената голяма система, която няма начин да го генерира.

PostgreSQL реализира специална функция generate_series за да направите това, докато Oracle и SQL Server може да използва рекурсия (CONNECT BY и рекурсивен CTE s, съответно).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите само таблици, а не изгледи, като използвате SHOW TABLES?

  2. AWS Aurora MySQL без сървър:как да се свържете от MySQL Workbench

  3. Как да активирате MySQL Slow Query Log в MySQL

  4. Вземете OLD стойност в MySQL Trigger СЛЕД изявление за актуализиране

  5. Mysql:latin1-> utf8. Преобразувайте знаците в техните многобайтови еквиваленти