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

  FORUM HardWare.fr
  Programmation

  sql: fo vraiment ke je my mette :D

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

sql: fo vraiment ke je my mette :D

n°23670
wouatouwou​atou
Posté le 10-04-2001 à 15:26:33  profilanswer
 

Ca y est jsuis dedans jusqu'au cou... :cry:
 
Voila je fais un select dans une table ki contient entre autres une date.
Comment kon fait pour n'avoir que la derniere date ?
un max ? ou un top ? bref, jsais vraiment pas ... :(
 
Aidez moi... c urgent... deja depuis hier... et la jsuis vraiment dans la mouise. :cry:


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
mood
Publicité
Posté le 10-04-2001 à 15:26:33  profilanswer
 

n°23672
trictrac
Posté le 10-04-2001 à 15:27:50  profilanswer
 

tu entends koi par la derniere date....si cest la plus recente alors tu devrais essayer avec un max

n°23674
wouatouwou​atou
Posté le 10-04-2001 à 15:29:15  profilanswer
 

ouais, c la plus recente ke je veux... je vais essayer de suite merci.. trictrac :D.. Enfin, un chtit espoir...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23680
wouatouwou​atou
Posté le 10-04-2001 à 15:35:56  profilanswer
 

oui... mais jaurais besoin de le mettre dans la condition where... avec un having? mais comment ?


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23685
joce
Architecte / Développeur principal
"BugHunter"
Posté le 10-04-2001 à 15:40:41  profilanswer
 

comprends pas où est ton problème :)
 
Tu fais :
 
mysql_query("SELECT MAX(date) FROM tatable",$link);

 

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


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°23687
shinji
Posté le 10-04-2001 à 15:43:21  profilanswer
 

Tu fait :  
 
select ...,date from ...
having date>=all in(select date from ...;)
;
 
La syntaxe est peut ê pas exacte mais c'est le principe, tu recherche une date supérieure ou égale (ce sera =)à toutes les dates de ta table!

n°23691
wouatouwou​atou
Posté le 10-04-2001 à 15:46:16  profilanswer
 

ben, en fait, je veux faire un select du genre:
 
select c1,c2,c3
from t1
where max(la_derniere_date)
 
car, je veux uniquement la ligne la plus récente (du point de vue de la date et non pas de l'id), tu vois ?
 
paske jai essaye:  
 
select c1,c2,c3,max(la_derniere_date)
from t1
 
Mais ca mrche pô :(
 
Meme dans un having le max() passe pô.. jsais plus comment faire.. :cry:
Peut-etre par un subselect ... mais c pô possible autrement ?


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23692
wouatouwou​atou
Posté le 10-04-2001 à 15:47:48  profilanswer
 

avec un all in ... il est pas possible de faire sans ca ?
moi je pensais faire le sub select dans le from... c une bonne idee ?


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23704
joce
Architecte / Développeur principal
"BugHunter"
Posté le 10-04-2001 à 16:01:17  profilanswer
 

ah ok :)
 
Ba faut faire :
 
select c1,c2,c3,max(la_derniere_date) from t1 GROUP BY la_derniere_date


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°23706
joce
Architecte / Développeur principal
"BugHunter"
Posté le 10-04-2001 à 16:02:24  profilanswer
 

ou alors :
 
select c1,c2,c3,la_derniere_date from t1 ORDER BY la_derniere_date DESC LIMIT 1
 
(perso je préfère ca)


---------------
Protèges carnets personnalisés & accessoires pour bébé
mood
Publicité
Posté le 10-04-2001 à 16:02:24  profilanswer
 

n°23711
shinji
Posté le 10-04-2001 à 16:12:41  profilanswer
 

il a raison joce:
 
select c1,c2,c3,max(date) from t1 ORDER BY date;
 
ça marche et c'est plus simple!
Oh la la ça remonte à loin les cours de SQL!!!!

n°23712
wouatouwou​atou
Posté le 10-04-2001 à 16:12:55  profilanswer
 

le limit il reconnait pas... jsuis sous oracle 8...
:(
et le group by il me dit ke c pas une expression group by :( :(


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23716
joce
Architecte / Développeur principal
"BugHunter"
Posté le 10-04-2001 à 16:17:12  profilanswer
 

shinji a écrit a écrit :

il a raison joce:
 
select c1,c2,c3,max(date) from t1 ORDER BY date;
 
ça marche et c'est plus simple!
Oh la la ça remonte à loin les cours de SQL!!!!




 
Avec mysql ca marche pas ca :)
Fo forcement un GROUP BY.
 
par contre effectivement  
 
select c1,c2,c3,date from t1 ORDER BY date;
 
ca rulez (mais faut limiter au premier résultat).


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°23721
joce
Architecte / Développeur principal
"BugHunter"
Posté le 10-04-2001 à 16:17:42  profilanswer
 

wouatouwouatou a écrit a écrit :

le limit il reconnait pas... jsuis sous oracle 8...
:(
et le group by il me dit ke c pas une expression group by :( :(




Comment ca c'est pas une expression GROUPBY ?


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°23722
wouatouwou​atou
Posté le 10-04-2001 à 16:19:55  profilanswer
 

je viens de tester et ca doit etre moi... mais ca marche tjrs pas... :(
 
pourtant jai fais le plus simple possible...
NOrmalement jai nue jointure mais meme en l'enlevant, ca marche pô...
Si vous pouviez me filer un chtit script avec
les tables person_contract, person
champ commun : pers_id
champ de person a prendre par le select : pers_fname, pers_lname
champ de person_contract a prendre pr le select: have_opening_date (c dessus ke je fait le max()),
account_number et have_relation_type

Merci d'avance ...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23724
wouatouwou​atou
Posté le 10-04-2001 à 16:22:41  profilanswer
 

erreur ora-00979 : not a group by expression.
 
ma requete:
 
select pc.account_number, pc.have_relation_type, max(pc.have_opening_date)
from person_contract pc
where pc.pers_id<10
group by pc.have_opening_date;


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23725
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 10-04-2001 à 16:24:07  profilanswer
 

wouatouwouatou a écrit a écrit :

erreur ora-00979 : not a group by expression.
 
ma requete:
 
select pc.account_number, pc.have_relation_type, max(pc.have_opening_date)
from person_contract pc
where pc.pers_id<10
group by pc.have_opening_date;




Essaie voir :
 
select pc.account_number, pc.have_relation_type, max(pc.have_opening_date)  
from person_contract pc group by pc.have_opening_date having pc.pers_id<10;

 

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


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°23728
jupiler
Un cousin...
Posté le 10-04-2001 à 16:28:28  profilanswer
 

wouatouwouatou a écrit a écrit :

le limit il reconnait pas... jsuis sous oracle 8...
:(
et le group by il me dit ke c pas une expression group by :( :(




 
"select c1,c2,c3,max(la_derniere_date) from t1 GROUP BY la_derniere_date"
 
pas bon, dans le group by faut mettre tous les éléments
du select qui ne sont pas dans un max, sum...
 
il faut donc faire:
 
select c1,c2,c3,max(la_derniere_date) from t1
GROUP BY c1,c2,c3


---------------
Je ne suis ni pour, ni contre, bien au contraire  
n°23729
jupiler
Un cousin...
Posté le 10-04-2001 à 16:29:29  profilanswer
 

wouatouwouatou a écrit a écrit :

erreur ora-00979 : not a group by expression.
 
ma requete:
 
select pc.account_number, pc.have_relation_type, max(pc.have_opening_date)
from person_contract pc
where pc.pers_id<10
group by pc.have_opening_date;




 
comme ci-dessus:
 
select pc.account_number, pc.have_relation_type, max(pc.have_opening_date)  
from person_contract pc  
where pc.pers_id<10  
group by pc.account_number, pc.have_relation_type


---------------
Je ne suis ni pour, ni contre, bien au contraire  
n°23732
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 10-04-2001 à 16:33:41  profilanswer
 

je suis d'accord aussi ;)
Enfin avec cette syntaxe, il va pas avoir le résultat qu'il veut :  
 
ca va lui donner pour chaque combinaison de pc.account_number et pc.have_relation_type le max de pc.have_opening_date, et je sais pas si c'est ce qu'il veut


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°23739
wouatouwou​atou
Posté le 10-04-2001 à 16:38:39  profilanswer
 

en effet, joce ... t'as raison... et c pas vraiment ce que je voulais..
Moi je voulais uniquement la ligne de derniere date
Ca march si je fait ke le max... mais si je veu daut' info... bah.. ca passe plus . :??:


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23746
jupiler
Un cousin...
Posté le 10-04-2001 à 16:42:03  profilanswer
 

désolé j'ai pris le train en route
 
 
bon si les perfs ne te préoccupent pas, essaye :
 
select pc.account_number, pc.have_relation_type,  
from person_contract pc  
where pc.pers_id<10  
and pc.have_opening_date in
(select max(pc.have_opening_date) from person_contract pc)


---------------
Je ne suis ni pour, ni contre, bien au contraire  
n°23755
wouatouwou​atou
Posté le 10-04-2001 à 16:52:35  profilanswer
 

youpi !!!
Merci a tous... :jap: le truc de jupiler fonctionne..
Meme si on me dit toujours ke le in et not in c pas bo...
L'essentiel c ke ca marche... :D
Mais si vous avez un meilleur truc, n'hesitez pas :)
Moi de mon cote je continue a chercher :D et je vous tiendrai au courant si je trouve un truc mieux :D:D:D


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23761
jupiler
Un cousin...
Posté le 10-04-2001 à 16:58:18  profilanswer
 

wouatouwouatou a écrit a écrit :

youpi !!!
Merci a tous... :jap: le truc de jupiler fonctionne..
Meme si on me dit toujours ke le in et not in c pas bo...
L'essentiel c ke ca marche... :D
Mais si vous avez un meilleur truc, n'hesitez pas :)
Moi de mon cote je continue a chercher :D et je vous tiendrai au courant si je trouve un truc mieux :D:D:D




 
c'est clair que select in c'est jamais bon pour les perfs
 
si je suis inspiré, j'essayerai de trouver mieux


---------------
Je ne suis ni pour, ni contre, bien au contraire  
n°23766
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 10-04-2001 à 17:08:10  profilanswer
 

wouatouwouatou a écrit a écrit :

youpi !!!
Merci a tous... :jap: le truc de jupiler fonctionne..
Meme si on me dit toujours ke le in et not in c pas bo...
L'essentiel c ke ca marche... :D
Mais si vous avez un meilleur truc, n'hesitez pas :)
Moi de mon cote je continue a chercher :D et je vous tiendrai au courant si je trouve un truc mieux :D:D:D




ba suffit de trouver comment limiter à un seul resultat :)


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°23767
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 10-04-2001 à 17:10:48  profilanswer
 

select rownum,c1,c2,c3,la_derniere_date from t1 WHERE rownum=1 ORDER BY la_derniere_date DESC

 

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


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°23768
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 10-04-2001 à 17:12:15  profilanswer
 

select rownum,pc.account_number, pc.have_relation_type, pc.have_opening_date  
from person_contract pc  
where pc.pers_id<10 AND rownum=1
ORDER BY pc.have_opening_date DESC;

 

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


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°23774
jupiler
Un cousin...
Posté le 10-04-2001 à 17:20:21  profilanswer
 

rownum , c'est ca que je cherchais
 
bien vu


---------------
Je ne suis ni pour, ni contre, bien au contraire  
n°23780
wouatouwou​atou
Posté le 10-04-2001 à 17:28:26  profilanswer
 

desole... mais le rownum, numerote les ligne dans lordre ou il les trouve pi vient seulement apres l'order by
Donc le rownum=1 marche pô
piske ca revient a faire retourne moi la premiere ligne que tu trouve, avant d'effectuer le tri par date... :(


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23784
jupiler
Un cousin...
Posté le 10-04-2001 à 17:39:00  profilanswer
 

wouatouwouatou a écrit a écrit :

desole... mais le rownum, numerote les ligne dans lordre ou il les trouve pi vient seulement apres l'order by
Donc le rownum=1 marche pô
piske ca revient a faire retourne moi la premiere ligne que tu trouve, avant d'effectuer le tri par date... :(




 
bonne remarque, qu'est-ce qu'il est con cet ORACLE :D


---------------
Je ne suis ni pour, ni contre, bien au contraire  
n°23786
ddr555
Posté le 10-04-2001 à 17:40:15  profilanswer
 

select pc.account_number, pc.have_relation_type,pc.have_opening_date
from person_contract pc  
where pc.pers_id<10  
and pc.have_opening_date = ( select max have_opening_date
from person_contract
where pers_id<10 )
 
voilou

n°23791
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 10-04-2001 à 17:57:07  profilanswer
 
n°23792
wouatouwou​atou
Posté le 10-04-2001 à 18:01:22  profilanswer
 

ben... c t evident... :??: pkoi jai p vu... me fo des vacances a moi :D


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23793
jupiler
Un cousin...
Posté le 10-04-2001 à 18:07:49  profilanswer
 

ddr555 a écrit a écrit :

select pc.account_number, pc.have_relation_type,pc.have_opening_date
from person_contract pc  
where pc.pers_id<10  
and pc.have_opening_date = ( select max have_opening_date
from person_contract
where pers_id<10 )
 
voilou




 
 
c'est exactement comme mon select in.
 
et pourquoi tu remets 2 fois pers_id < 10??


---------------
Je ne suis ni pour, ni contre, bien au contraire  
n°23795
wouatouwou​atou
Posté le 10-04-2001 à 18:20:49  profilanswer
 

sinon le max il se fait sur toutes les lignes... or ce qui nous interesse c uniquement celles inferieures a 10...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23799
jupiler
Un cousin...
Posté le 10-04-2001 à 18:26:34  profilanswer
 

select max(date) from table1
 
ou
 
select max(date) from table1 where champ1 < value
 
je ne sais pas qui est le plus rapide
 
je pense meme que c'est pire de faire 2* le test sur pers_id

 

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


---------------
Je ne suis ni pour, ni contre, bien au contraire  
n°23804
wouatouwou​atou
Posté le 10-04-2001 à 19:04:20  profilanswer
 

Mon pb. original etait assez simple a comprendre.. mais jarrive pas a l'expliquer :(
 
On peut le voir comme ca:
 
je fais un select avec jointure simple sur deux tables t1 et t2 ki me retourne tout plein d'infos t1.c1,t2.c2,t2.une_date  :)...
Mais voila ca ne me convient pas...
 
Car pour une meme valeur de t1.c1, je peux avoir plusieurs valeurs de t2.c2 (et donc t2.une_date).
Moi, je voudrais simplement les infos t2.c2 et t2.une_date avec t2.une_date valant la derniere date (la plus recente).
 
Ainsi, j'aurais une seule ligne correspondant a t1.c1, ki contiendrai entre autre l'info. t2.c2 la plus recente (i.e. max(t2.une_date)).
 
Voila mon pb. ... Malgre les reponses (merci encore pour tout), je n'arrive tjrs pas a recuperer ca... car la colonne t2.c2 donne toujours la meme chose ainsi que la date (ce ki est logique). Je n'arrive pas a avoir le max pour chacune des lignes t1.c1... voila tout... apres ca je vous embete plus.. au moins jusqu'au prochain pb de sql. :D
 
Voici ma requete... Mais elle est longue... alors je lai simplifiee un peu... :)
 
SELECT  
   p.pers_lname,  
   o.oper_id,  
   op.operation_date,  
   op.oper_id,  
   sp.status_short_label  
FROM
   operation o,  
   operation op,  
   status s,  
   status sp,  
   person p
WHERE
       o.oper_pers_id=p.pers_id
   AND o.oper_last_status_id=s.status_id
   AND lower(s.status_short_label)='x'
   AND o.affected_user_id=162
   AND op.affected_user_id=o.affected_user_id
   AND op.operation_date=(SELECT max(o.operation_date)  
     FROM operation o,  
                               status s  
     WHERE o.affected_user_id=162  
     AND o.oper_last_status_id=s.status_id  
     AND lower(s.status_short_label)<>'x'  
    )  
   AND op.oper_last_status_id=sp.status_id  
   AND lower(sp.status_short_label)<>'x'  
ORDER BY o.oper_realisation_date desc;
 
Voila voilou... kkun aurait une idee pour resoudre ce petit pb ?

 

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


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23871
wouatouwou​atou
Posté le 11-04-2001 à 09:43:25  profilanswer
 

up .


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°23891
drakkeng
Posté le 11-04-2001 à 10:08:18  profilanswer
 

moi aussi je dois m'y mettre mais je sais pas quel logiciel utiliser vous pouvez me conseiller ?

 

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

n°23892
jupiler
Un cousin...
Posté le 11-04-2001 à 10:14:15  profilanswer
 

bon wouatouwouatou:
 
essaye un truc du genre
 
select t1.c1, max(t2.date)
from t1,t2
where
t1.c1  = t2.c1   (si c1 est le champ qui permet la jointure)
group by t1.c1
 
ca doit te donner le max de la date correspondant à t1.c1


---------------
Je ne suis ni pour, ni contre, bien au contraire  
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  sql: fo vraiment ke je my mette :D

 

Sujets relatifs
Cherche petit hébergement PHP4/MySQL gratuit ou vraiment pas cher :)[ASP] Un truc vraiment bizard, incomprehensible (enfin pour moi)
[VB6 et access] j'ai vraiment besoin d'aide pour fusionner des tablesAlgorithme VRAIMENT basic qui ne marche pas
Plus de sujets relatifs à : sql: fo vraiment ke je my mette :D


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR