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 :
Index unique (CatId,Dateg,Tarif)
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
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 :
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.
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
Voilà un début d'idée mais qui ne donne pas ce que je cherche!
Merci de votre aide!
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
Partager