Touver des intervalles de dates continues
Voilà, j'ai une table qui contient des catégories, des dates et des tarifs. Chaque catégorie peut avoir différents tarifs pour des dates différentes, une catégorie ne peut avoir qu'un tarif à une date donnée :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| Id CatId Dateg Tarif
------ ------ ------------ ---------
000001 12 2009-07-07 1
000002 12 2009-07-08 1
000003 12 2009-07-09 1
000004 12 2009-07-10 2
000005 12 2009-07-15 1
000006 12 2009-07-16 1
000007 13 2009-07-08 1
000008 13 2009-07-09 1
000009 14 2009-07-07 2
000010 14 2009-07-08 1
000010 14 2009-07-10 1 |
Index unique (CatId,Dateg,Tarif)
Je voudrais détecter pour une catégorie donnée des intervalles de dates continues de même tarif et garder que le début et la fin de l'intervalle.
Pour l'exemple précédent, on aura :
Code:
1 2 3 4 5 6 7 8 9
| CatId Debut Fin Tarif
------ ------------ ------------ ---------
12 2009-07-07 2009-07-09 1
12 2009-07-10 2009-07-10 2
12 2009-07-15 2009-07-16 1
13 2009-07-08 2009-07-09 1
14 2009-07-07 2009-07-07 2
14 2009-07-08 2009-07-08 1
14 2009-07-10 2009-07-10 1 |
Comme j'arrivais pas à faire une requête SQL qui donne le résultat attendu, je parcours la table (triée par CatId, Dateg et Tarif) (fonction PHP) en détectant les continuités et les discontinuités des dates. Mais je suis sur qu'il existe une solution meilleure en MySQL.
Voilà un début d'idée mais qui ne donne pas ce que je cherche!
Code:
1 2 3
| SELECT CatId, min(Dateg) AS Debut, max(Dateg) AS Fin, Tarif
FROM MaTable
GROUP BY CatId, Tarif |
Merci de votre aide!