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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT CatId, min(Dateg) AS Debut, max(Dateg) AS Fin, Tarif
FROM MaTable
GROUP BY  CatId, Tarif
Merci de votre aide!