j'ai eu une table de base de données qui ressemble à ceci:MySQL: semaine plage de dates à partir du numéro de la semaine dans une requête
| id | clock | info
----------------------------------------------
| 1 | 1262556754 | some info
| 2 | 1262556230 | some other info
| 3 | 1262556988 | and another
| 4 | 1262555678 | and some more
Il contient des enregistrements de journaux et un horodatage unix, lorsque ce journal a été écrit. Ce dont j'ai besoin, c'est d'obtenir un rapport hebdomadaire sur le nombre d'enregistrements de journaux par semaine. Voici une requête que j'ai écrit:
SELECT
DATE_FORMAT(FROM_UNIXTIME(clock), "%U") AS week
count(*) as cnt
FROM logs
WHERE DATE_FORMAT(FROM_UNIXTIME(clock), "%Y") = '2010'
GROUP BY week
Cela donne un résultat comme celui-ci:
| week | cnt
-------------------------------
| 1 | 55
| 2 | 134
| 4 | 765
| 20 | 65
Great! Mais ce que je voudrais voir, est une plage de dates comme 08 Feb 2010 00:00 - 15 Feb 2010 00:00
, donc mon jeu de résultat ressemblerait à ceci:
| day_start | day_end | cnt
---------------------------------------------------------
| 08 Feb 2010 00:00 | 15 Feb 2010 00:00 | 55
| 15 Feb 2010 00:00 | 22 Feb 2010 00:00 | 76
| 22 Feb 2010 00:00 | 01 Mar 2010 00:00 | 756
Est-il possible de le faire?
Cette approche ne fonctionnera pas très bien si vous avez des données de différentes années dans la même table - '% U' donne le numéro de la semaine (où dimanche est le premier jour de la semaine) - le premier dimanche en 2009 serait 1, tout comme le premier dimanche de 2010. Vous pourriez avoir besoin d'une approche différente. Jetez un oeil à http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function%5Fyearweek –
Mes rapports sont spécifiques à l'année, j'ai édité la question –