Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2972 connectés 

  FORUM HardWare.fr
  Programmation

  sql : group by et order by ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sql : group by et order by ...

n°26864
wouatouwou​atou
Posté le 24-04-2001 à 11:02:44  profilanswer
 

Encore un chtit pb.:
 
Je voudrais faire un regroupement du genre:
 
Ordonner par date decroissante, les lignes regroupées par l'id.
Exemple:

 id   |   Date
      |  
1150  | 23/04/01
1150  | 22/04/01
1081  | 23/04/01
1081  | 23/04/01
1081  | 23/04/01
980   | 19/04/01
1030  | 18/04/01

Comment faire ca ? plzzz
 
J'ai essaye un order by mais ca ordonne pas lesgroupes...
Pi jai essayé aussi avec un group by sur l'id suivi d'un un order by sur la date, mais il me mais que c pas une expression group by sur l'id... :(


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
mood
Publicité
Posté le 24-04-2001 à 11:02:44  profilanswer
 

n°26868
Bendes
Posté le 24-04-2001 à 11:07:19  profilanswer
 

Essaye tj ça : "ORDER BY id DESC, date DESC", on ne sais jamais mais dans la logique ça doit tourné...

n°26869
wouatouwou​atou
Posté le 24-04-2001 à 11:09:13  profilanswer
 

j'ai teste ausi mais ca donne pas le resultat voulu :(...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°26877
ddr555
Posté le 24-04-2001 à 11:26:09  profilanswer
 

tu veux faire quoi exactement, parce que là, c'est pas clair du tout

n°26880
drakkon
POWAAAAAAAAAA !
Posté le 24-04-2001 à 11:29:38  profilanswer
 

ouai pas clair du out


---------------
[:drakkon] D R A K K O N Membre du Team [KHEOPS] ! Nous avons des problèmes à toutes vos solutions - Le Site: http://seti-kheops.dyndns.org/
n°26884
wouatouwou​atou
Posté le 24-04-2001 à 11:33:04  profilanswer
 

ben... comme dans l'exemple... il me faudrait ordonner les lignes par date decroissante mais en tenant compte de l'id...
 
Pour chaque id, il faut ordonner par date decroissante. On a ainsi des lignes groupées par l'id.
Puis ordonner les groupes ainsi formés par date decroissante (par rapport a la date la plus recente du groupe), mais en préservant l'ordre dans les groupes.
 
J'sais pas si c plus clair ... mais j'espere que c mieux :D

 

[edit]--Message édité par wouatouwouatou--[/edit]


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°26885
wouatouwou​atou
Posté le 24-04-2001 à 11:36:30  profilanswer
 

au final on devrait obtenir des groupes d'id ordonnés par rapport a la date la plus recente du groupe... mais a l'interieur de chaque groupe les lignes doivent etre aussi ordonnées.


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°26890
ddr555
Posté le 24-04-2001 à 11:45:50  profilanswer
 

select a.id,a.date,b.date
from table a,table b
where a.id = b.id
and b.date = ( select max(date) from table c where c.id = b.id

n°26892
ddr555
Posté le 24-04-2001 à 11:47:15  profilanswer
 

oups, gourrage de bouton.
 
faut faire une requete où tu récupères la date max pour un groupe d'id, ensuite tu te sers de ça pour trier ta liste en n°1, puis tu tries par la date.
 
bon, j'vais manger. si t'y arrives pas, j'te sors la requête complète.

n°26894
Fred999
Rabat-joie
Posté le 24-04-2001 à 11:50:02  profilanswer
 

c'est pas un order by date desc, id desc???
 
Tu veux bien trier par date PUIS par id???

mood
Publicité
Posté le 24-04-2001 à 11:50:02  profilanswer
 

n°26906
thegti
La constipation se soigne ...
Posté le 24-04-2001 à 12:12:17  profilanswer
 

Salut
 
order by id desc, date desc
ou
order by id , date desc
selon l'ordre que tu veut pour l'id
Tu ne peut pas garder ton ordre initial des id en une passe

n°26916
ddr555
Posté le 24-04-2001 à 12:24:46  profilanswer
 

il veut trier les lignes d'abord par la date maxi pour un id, donc obligé de passer par une auto-jointure, sinon les groupes seront pas bien ordonnés.

n°26943
wouatouwou​atou
Posté le 24-04-2001 à 13:30:54  profilanswer
 

en fait, ma 'table' est une requete assez lourde (2 sec).
Alors si je dois la lancer a chaque fois ca risque de faire lourd au final... surtout qu'elle se retrouvera en sous requete imbriquées et correlee... le pire de tout :(
sinon, ben si ya pas moyen ... ben reste plus ka pleurer :cry:
 
P.S: D'autant plus que la strategie bidon de pas vouloir de procedure stockee et de table temporaire complique qq peu la tache.. Vraiment ces chefs de projet.. ils devraient se pencher un peu plus sur les kestions techniques... en plus ils vous donnent des delais pas possibles !!!! Voila c t mon coup de gueule du jour...
La jsuis a la bourre de plus d1 semaine :D...

 

[edit]--Message édité par wouatouwouatou--[/edit]


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°26945
ddr555
Posté le 24-04-2001 à 13:34:16  profilanswer
 

Change de boite !!! Travailler avec des cons pareils qui te disent y faut pas faire comme ça mais comme ça, C très lourd de travailler avec.

n°26946
ddr555
Posté le 24-04-2001 à 13:35:26  profilanswer
 

une semaine de bourre ???
 
C pas beaucoup ... il faut compter en % du temps global du projet. quand tu arriveras à 300 % du temps prévu, tu pourras commencer à dire que t'es à la bourre :D

n°27429
wouatouwou​atou
Posté le 25-04-2001 à 12:54:03  profilanswer
 

Un fait nouveau.. :D
 
Maintenant il me fo un ordre par date la plus recente...
Mais groupées par id.. est-ce possible ?
 
Jai fais un group by id suivi d'un order by la_date desc
Mais ca marche pas...
Ptet paske ds mon select ya plusieurs champs... autres ke l'id et la date...
Jsuis obligé de mettre touts les champs de mon select pourle group by, sinon il aime pas :( Et je crois ke c ca ki fait foire le truc..
 
Une idee ? Eclairez ma lanterne plz... elle commence par etre usee :D
 
P.S: J'en ai marre... :cry::cry:


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°27458
thegti
La constipation se soigne ...
Posté le 25-04-2001 à 13:33:02  profilanswer
 

Salut
 
:cry: :cry:
c'est triste hein ?
:cry: :cry:
 
Moi comme ca à chaud je ferais un truc comme ca:
 
select a.id, a.date
from table a,
(select b.id, max(b.date) as maxdate
 from table b
 group by b.id) c
where a.id=c.id
order by c.maxdate desc

 

[edit]--Message édité par thegti--[/edit]

n°27467
wouatouwou​atou
Posté le 25-04-2001 à 13:50:48  profilanswer
 

je vais essaye ca .. mais ca ressemble au truc donne plus haut par ddr555


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°27469
drakkon
POWAAAAAAAAAA !
Posté le 25-04-2001 à 14:06:18  profilanswer
 

ddr555 a écrit a écrit :

une semaine de bourre ???
 
C pas beaucoup ... il faut compter en % du temps global du projet. quand tu arriveras à 300 % du temps prévu, tu pourras commencer à dire que t'es à la bourre :D




t'as carrément raison !
Y sont trop ouf des Chef de projet !
Y z'était pas commerciaux avant ;)


---------------
[:drakkon] D R A K K O N Membre du Team [KHEOPS] ! Nous avons des problèmes à toutes vos solutions - Le Site: http://seti-kheops.dyndns.org/
n°27474
ddr555
Posté le 25-04-2001 à 14:12:21  profilanswer
 

Ce que je supporte pas, C les chefs de projet qui ont jamais fait de technique, ou qui était nuls ou qui ont oublié ce que c'était, et qui par la même cherchent à te mettre sur le dos la responsabilité du dérapage d'un projet dont tu n'es que le maillon final. Il est temps que je passe chef de projet moa  :cry:

n°27541
wouatouwou​atou
Posté le 25-04-2001 à 15:47:40  profilanswer
 

Mais.. chef de projet c pas un passage obligé pour nous :D
 
Au fait, ca marche ton truc thegti !!!


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°27559
ddr555
Posté le 25-04-2001 à 16:02:30  profilanswer
 

c'était mon idée, mais j'avais pas eu le temps d'optimiser ...

n°27608
wouatouwou​atou
Posté le 25-04-2001 à 17:43:23  profilanswer
 

ouais.. c bien ce ke je pensais.. :D
Mais la forme etait differente, alors... :p
Bref, en tout cas ca marche... mais c un peu long...
 
sinon, comment on pourrait mettre ca en curseur ou vue?? Est ce une bonne idee ?


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°27613
thegti
La constipation se soigne ...
Posté le 25-04-2001 à 17:54:40  profilanswer
 

Bah je croyais que c'était tout en une seule requête, pas de curseur, pas de vue ...
Le chef de projet a changé de stratégie ?

n°27615
wouatouwou​atou
Posté le 25-04-2001 à 18:19:51  profilanswer
 

ben... je lui ai mis la pression.. :D
 
En fait, c paske telle kelle est la requete prend 14s...
pour simplement sortir 380 lignes environs...  
 
Et je lui ai dit ke peut etre avec des curseurs et proc. stockee. ca irai plus vite... mais un peut etre seulement..
 
Alors il a dit : "J'ai une idee, et avec les curseurs... ca irait plus vite ?? parce que la ta requete est trop longue... "
* Sans commentaire :D *
 
Bref, moi j'sais meme pas si avec des curseurs ce serait mieux ou pas.. mais je pense ke oui ...
 
Au fait, ma requete fait 7Ko... avec un tout ptit peu de commentaire (qq octets).. Enorme hein ??


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°27652
ddr555
Posté le 25-04-2001 à 21:58:50  profilanswer
 

si c'est bien fait avec les curseurs, ça sera plus rapide, C sur ...
 
C bien un chef de projet pas technique du tout, je reconnais bien la marque caractéristique :D:D:D

n°27684
drakkon
POWAAAAAAAAAA !
Posté le 26-04-2001 à 08:58:10  profilanswer
 

Arfff !!!!!
wouatouwouatou> Il es trop fot ton chef de projet ! :lol:  :lol:  :lol:


---------------
[:drakkon] D R A K K O N Membre du Team [KHEOPS] ! Nous avons des problèmes à toutes vos solutions - Le Site: http://seti-kheops.dyndns.org/
n°27708
thegti
La constipation se soigne ...
Posté le 26-04-2001 à 10:11:42  profilanswer
 

Salut
 
Avec des curseurs, faut voir si tu peut réduire le nombre de passes dans les tables
En passant par des tables temporaires, tu peut y gagner pas mal aussi, au lieu de faire des sous-requêtes de la mort
 
Par contre, sur des grosses tables, avec des indexs bien pensés, tu peut y gagner beaucoup
 
Par exemple, pour ca:
 
select a.id, a.date  
from table a,  
(select b.id, max(b.date) as maxdate  
from table b  
group by b.id) c  
where a.id=c.id  
order by c.maxdate desc
 
Déjà faut faire un index sur les champs de jointure des tables concernées, donc ici un index sur id.
Deuxième, dans la sous-requête, on a un group by id et un max(date), donc un index (id,date).
Là déjà, normalement, tu dois gagner pas mal de temps, au détriment de la taille de la base de données
Autre détail, tu peut faire des indexs clusterisés ou les index seront placés de facon contigu sur le disque, donc gagner encore un peu de perfs, enfin ca, ca dépend si tu sent que le disque dur du serveur rame ou pas, sinon c'est pas primordial
 
a+

n°27724
wouatouwou​atou
Posté le 26-04-2001 à 11:33:31  profilanswer
 

oki.. merci de ces conseils.. :jap:
 
Mais j'ai encore une question... C'est ti normal ke pour la meme requete, le temps d'execution est different sur plusieurs essais ? Et si je suis tout seul a requeter le serveur, c normal dans ce cas ?


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°27749
ddr555
Posté le 26-04-2001 à 12:53:14  profilanswer
 

oui c'est normal, le temps varie en fonction de la charge serveur ( process qui tournent en permanence ) et en fonction des disques, de la présence des données dans le cache ...
 
pour te foutre les boules : les chefs de projet comme ça ont aussi une marque de fabrique pas cool du tout : tu peux être sur qu'il va charger à fond sur ton dos tout dérapage à ses supérieurs, sisi, C vrai ...

n°27875
omega2
Posté le 26-04-2001 à 18:04:20  profilanswer
 

J'ai pas tout lus mais d'après ce que j'ai comrpis il faut faire un  
select table1.max(date) date1,table.date,table.id
from table, table as table1
where
table.id=table1.id
order by date1,id,date

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  sql : group by et order by ...

 

Sujets relatifs
[VB6] - CursorType - LockType et order by 
Plus de sujets relatifs à : sql : group by et order by ...


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)