sql: fo vraiment ke je my mette :D

sql: fo vraiment ke je my mette :D - Programmation

Marsh Posté le 10-04-2001 à 15:26:33    

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"
Reply

Marsh Posté le 10-04-2001 à 15:26:33   

Reply

Marsh Posté le 10-04-2001 à 15:27:50    

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

Reply

Marsh Posté le 10-04-2001 à 15:29:15    

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"
Reply

Marsh Posté le 10-04-2001 à 15:35:56    

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"
Reply

Marsh Posté le 10-04-2001 à 15:40:41    

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é
Reply

Marsh Posté le 10-04-2001 à 15:43:21    

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!

Reply

Marsh Posté le 10-04-2001 à 15:46:16    

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"
Reply

Marsh Posté le 10-04-2001 à 15:47:48    

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"
Reply

Marsh Posté le 10-04-2001 à 16:01:17    

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é
Reply

Marsh Posté le 10-04-2001 à 16:02:24    

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é
Reply

Marsh Posté le 10-04-2001 à 16:02:24   

Reply

Marsh Posté le 10-04-2001 à 16:12:41    

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!!!!

Reply

Marsh Posté le 10-04-2001 à 16:12:55    

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"
Reply

Marsh Posté le 10-04-2001 à 16:17:12    

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é
Reply

Marsh Posté le 10-04-2001 à 16:17:42    

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é
Reply

Marsh Posté le 10-04-2001 à 16:19:55    

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"
Reply

Marsh Posté le 10-04-2001 à 16:22:41    

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"
Reply

Marsh Posté le 10-04-2001 à 16:24:07    

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é
Reply

Marsh Posté le 10-04-2001 à 16:28:28    

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  
Reply

Marsh Posté le 10-04-2001 à 16:29:29    

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  
Reply

Marsh Posté le 10-04-2001 à 16:33:41    

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é
Reply

Marsh Posté le 10-04-2001 à 16:38:39    

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"
Reply

Marsh Posté le 10-04-2001 à 16:42:03    

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  
Reply

Marsh Posté le 10-04-2001 à 16:52:35    

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"
Reply

Marsh Posté le 10-04-2001 à 16:58:18    

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  
Reply

Marsh Posté le 10-04-2001 à 17:08:10    

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é
Reply

Marsh Posté le 10-04-2001 à 17:10:48    

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é
Reply

Marsh Posté le 10-04-2001 à 17:12:15    

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é
Reply

Marsh Posté le 10-04-2001 à 17:20:21    

rownum , c'est ca que je cherchais
 
bien vu


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 10-04-2001 à 17:28:26    

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"
Reply

Marsh Posté le 10-04-2001 à 17:39:00    

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  
Reply

Marsh Posté le 10-04-2001 à 17:40:15    

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

Reply

Marsh Posté le 10-04-2001 à 17:57:07    

Reply

Marsh Posté le 10-04-2001 à 18:01:22    

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"
Reply

Marsh Posté le 10-04-2001 à 18:07:49    

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  
Reply

Marsh Posté le 10-04-2001 à 18:20:49    

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"
Reply

Marsh Posté le 10-04-2001 à 18:26:34    

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  
Reply

Marsh Posté le 10-04-2001 à 19:04:20    

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"
Reply

Marsh Posté le 11-04-2001 à 09:43:25    

up .


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 11-04-2001 à 10:08:18    

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

 

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

Reply

Marsh Posté le 11-04-2001 à 10:14:15    

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  
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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