Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como agrupar o número de linhas por dia também em dias sem linha no MySQL?


Para lidar com datas com 0 registros correspondentes, minha prática normal é usar uma tabela de calendário para unir.

Por exemplo, crie uma tabela com um campo chamado calendar_date e preenchê-lo com todas as datas de 1st Jan 2000 até 31st Dec 2070 , ou algum outro intervalo adequado aos seus propósitos de relatório.

Então use algo como...
SELECT
  calendar.calendar_date,
  COUNT(*)
FROM
  calendar
LEFT JOIN
  yourData
    ON  yourData.timeStamp >= calendar.calendar_date
    AND yourData.timeStamp <  calendar.calendar_date + 1
WHERE
      calendar.calendar_date >= '01 Jan 2012'
  AND calendar.calendar_date <  '04 Jan 2012'
GROUP BY
  calendar.calendar_date

Esta tabela pode ter muitos usos extras, como sinalizar feriados, início de semanas e meses. Com usos prudentes de sinalizadores e índices, você pode obter muito disso.