sql: fo vraiment ke je my mette :D - Programmation
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
Marsh Posté le 10-04-2001 à 15:29:15
ouais, c la plus recente ke je veux... je vais essayer de suite merci.. trictrac  .. Enfin, un chtit espoir...
.. Enfin, un chtit espoir...
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 ?
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]
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!
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..  
 
Peut-etre par un subselect ... mais c pô possible autrement ?
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 ?
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
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)
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!!!!
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  
 
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).
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 ?
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 ...
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;
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]
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
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
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
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 . 
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)
Marsh Posté le 10-04-2001 à 16:52:35
youpi !!! 
Merci a tous...  le truc de jupiler fonctionne..
 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...  
 
Mais si vous avez un meilleur truc, n'hesitez pas  
 
Moi de mon cote je continue a chercher  et je vous tiendrai au courant si je trouve un truc mieux
 et je vous tiendrai au courant si je trouve un truc mieux  D
D
Marsh Posté le 10-04-2001 à 16:58:18
| wouatouwouatou a écrit a écrit  : youpi !!! Merci a tous...  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...   Mais si vous avez un meilleur truc, n'hesitez pas   Moi de mon cote je continue a chercher  et je vous tiendrai au courant si je trouve un truc mieux  D   | 
 
 
c'est clair que select in c'est jamais bon pour les perfs 
 
si je suis inspiré, j'essayerai de trouver mieux
Marsh Posté le 10-04-2001 à 17:08:10
| wouatouwouatou a écrit a écrit  : youpi !!! Merci a tous...  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...   Mais si vous avez un meilleur truc, n'hesitez pas   Moi de mon cote je continue a chercher  et je vous tiendrai au courant si je trouve un truc mieux  D   | 
 
ba suffit de trouver comment limiter à un seul resultat 
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]
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]
Marsh Posté le 10-04-2001 à 17:20:21
rownum , c'est ca que je cherchais 
 
bien vu
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... 
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 
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
Marsh Posté le 10-04-2001 à 17:57:07
ReplyMarsh Posté le 10-04-2001 à 18:01:22
ben... c t evident...  pkoi jai p vu... me fo des vacances a moi
 pkoi jai p vu... me fo des vacances a moi 
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??
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...
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]
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.  
 
 
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]
Marsh Posté le 11-04-2001 à 09:43:25
up .
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]
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
Marsh Posté le 10-04-2001 à 15:26:33
Ca y est jsuis dedans jusqu'au cou... 
 
 
 

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.
---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"