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

 


Dernière réponse
Sujet : sql : group by et order by ...
omega2 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

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
omega2 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
ddr555 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 ...
wouatouwouatou 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 ?
thegti 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+
drakkon Arfff !!!!!
wouatouwouatou> Il es trop fot ton chef de projet ! :lol:  :lol:  :lol:
ddr555 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
wouatouwouatou 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 ??
thegti 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 ?
wouatouwouatou 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 ?
ddr555 c'était mon idée, mais j'avais pas eu le temps d'optimiser ...
wouatouwouatou Mais.. chef de projet c pas un passage obligé pour nous :D
 
Au fait, ca marche ton truc thegti !!!
ddr555 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:
drakkon

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 ;)

wouatouwouatou je vais essaye ca .. mais ca ressemble au truc donne plus haut par ddr555
thegti 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]

wouatouwouatou 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:
ddr555 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
ddr555 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.
wouatouwouatou 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]

ddr555 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.
thegti 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
Fred999 c'est pas un order by date desc, id desc???
 
Tu veux bien trier par date PUIS par id???
ddr555 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.
ddr555 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
wouatouwouatou 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.
wouatouwouatou 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]

drakkon ouai pas clair du out
ddr555 tu veux faire quoi exactement, parce que là, c'est pas clair du tout
wouatouwouatou j'ai teste ausi mais ca donne pas le resultat voulu :(...
Bendes Essaye tj ça : "ORDER BY id DESC, date DESC", on ne sais jamais mais dans la logique ça doit tourné...
wouatouwouatou 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... :(

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