Group by et date

Group by et date - SQL/NoSQL - Programmation

Marsh Posté le 18-02-2005 à 11:57:25    

Voici mon problème:
 
Je voudrais faire un group by sur un champ datetime mais uniquement sur une partie de la date. je voudrais que ma requete sql groupe par semaine dans le genre :  
 
SELECT plandate, nom, prénom FROM planning
GROUP BY plandate (week) <== probablement pas juste, mais ca explique ce que je voudrais faire.
ORDER BY nom
 
Le but c'est de grouper les champs par semaine et puis sur une semaine de classer par nom.
 
Merciii

Reply

Marsh Posté le 18-02-2005 à 11:57:25   

Reply

Marsh Posté le 18-02-2005 à 18:55:36    

Je comprends pas trop ce que tu veux faire ...
 
Comment veux-tu à la fois grouper par semaine, et afficher tous les noms et prénoms ???
 
A mon avis tu cherches qqch comme :
 
SELECT TO_CHAR(plandate, 'YYYY'), TO_CHAR(plandate, 'WW'), nom, prénom
FROM planning
ORDER BY TO_CHAR(plandate, 'YYYY'), TO_CHAR(plandate, 'WW'), nom;
 
(exemple sous Oracle, ou le format de date WW est le numéro de la semaine, et YYYY est l'année)
 
Mais la seule subtilité ici, à part le tri, est de faire apparaître le numéro de la semaine, pour que le traitement derrière détecte le changement de semaine.

Reply

Marsh Posté le 21-02-2005 à 10:51:14    

Effectivement je vais devoir donner un peu plus d'explication sur ma table pour aider à la compréhension.
 
La BD existait avant, donc inutile de me faire la réflexion que les champs sont redondants etc, je le sais ;)
 
La table de planning est composée des champs qui suivent : une date, une heure de début, une heure de fin, le nom du professeur et le nom de l'éleve (pour simplifier)
 
Pour plus de visibilité quand j'affiche le planning, je fais un cadre autour d'une semaine complete de rendez vous. Je vérifie chaque ligne pour voir si elle est bien de la semaine courante et sinon je ferme le cadre. Par conséquant, j'aimerais dans ce cadre pourvoir faire différents tris (date, heure de début, nom,...). Si je fais le tri sans grouper au préalable toutes mes informations par semaine, je vais me retrouver avec plein de petits cadres, ce qui ne correspond pas du tout au résultat que je recherche. Donc avant de trier par nom, je devrais grouper par semaine.
 
C'est plus compréhensible ou c'est toujours du chinois ? (j'ai conscience que parfois ce genre d'explications peuvent sembler très confuses) :)


Message édité par petitpata le 21-02-2005 à 10:57:11
Reply

Marsh Posté le 21-02-2005 à 10:55:02    

Beegee a écrit :

Je comprends pas trop ce que tu veux faire ...
 
Comment veux-tu à la fois grouper par semaine, et afficher tous les noms et prénoms ???
 
A mon avis tu cherches qqch comme :
 
SELECT TO_CHAR(plandate, 'YYYY'), TO_CHAR(plandate, 'WW'), nom, prénom
FROM planning
ORDER BY TO_CHAR(plandate, 'YYYY'), TO_CHAR(plandate, 'WW'), nom;
 
(exemple sous Oracle, ou le format de date WW est le numéro de la semaine, et YYYY est l'année)
 
Mais la seule subtilité ici, à part le tri, est de faire apparaître le numéro de la semaine, pour que le traitement derrière détecte le changement de semaine.


J'aime bien ta solution mais le TO_CHAR par ODBC-->ACESS il aime pas trop :(

Reply

Marsh Posté le 21-02-2005 à 13:52:00    

TO_CHAR (plandate, 'YYYY') en ACCESS devient YEAR(plandate)
 
en ce qui concerne TO_CHAR (plandate, 'WW') j'en ai aucune idée.

Reply

Marsh Posté le 21-02-2005 à 14:47:30    

moi23372 a écrit :

TO_CHAR (plandate, 'YYYY') en ACCESS devient YEAR(plandate)
 
en ce qui concerne TO_CHAR (plandate, 'WW') j'en ai aucune idée.


Merci bien, ca me donne une piste, je vais chercher! :)

Reply

Marsh Posté le 21-02-2005 à 16:34:56    

moi23372 a écrit :

TO_CHAR (plandate, 'YYYY') en ACCESS devient YEAR(plandate)
 
en ce qui concerne TO_CHAR (plandate, 'WW') j'en ai aucune idée.


Au cas ou certain chercheraient également, j'ai trouvé la solution.
 
Il semblerait qu'avec un système à jour, la fonction FORMAT passe sans probleme(ODBC-->ACCESS). Donc il suffit de faire un ORDER BY FORMAT("Plandate", 'WW') pour classer par semaine.
 
Avant d'utiliser format, j'avais essayé avec WEEK(), WEEKNUM(), ... à l'instar de YEAR() cité plus haut mais ca ne fonctionnait pas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed