Maison > Questions et réponses > le corps du texte
P粉7331667442023-08-25 00:59:49
Lorsque j'ai dû traiter ce problème, afin de renseigner les dates manquantes, j'ai en fait créé une table de référence contenant uniquement toutes les dates qui m'intéressaient et joint les tables de données sur les champs de dates. C'est brut et brut, mais ça marche.
SELECT DATE(r.date),count(d.date) FROM dates AS r LEFT JOIN table AS d ON d.date = r.date GROUP BY DATE(r.date) ORDER BY r.date ASC;
En ce qui concerne la sortie, j'utiliserais SELECT INTO OUTFILE au lieu de générer manuellement le CSV. De cette façon, nous n'avons pas à nous soucier d'échapper aux caractères spéciaux.
P粉5936497152023-08-25 00:39:00
Lorsque vous avez besoin de quelque chose comme ça côté serveur, vous créez généralement une table contenant toutes les dates possibles entre deux moments, puis vous joignez cette table avec les résultats de la requête. Similaire à :
create procedure sp1(d1 date, d2 date) declare d datetime; create temporary table foo (d date not null); set d = d1 while d <= d2 do insert into foo (d) values (d) set d = date_add(d, interval 1 day) end while select foo.d, count(date) from foo left join table on foo.d = table.date group by foo.d order by foo.d asc; drop temporary table foo; end procedure
Dans ce cas précis, il serait préférable de faire quelques vérifications côté client et d'ajouter une chaîne supplémentaire si la date du jour n'est pas le lendemain du jour précédent.