Récupérer la date la plus récente entre 2 [SQL SERVER] - Programmation
Marsh Posté le 03-05-2001 à 11:27:16
up 
Marsh Posté le 03-05-2001 à 11:40:21
Si ta version de SQL Server le permet, tu peux utiliser l'expression CASE. 
| Code : 
 | 
 
 
Voilou.
Marsh Posté le 03-05-2001 à 11:42:42
| Fred999 a écrit a écrit  : Si ta version de SQL Server le permet, tu peux utiliser l'expression CASE. 
   | 
 
merci fred999
Marsh Posté le 03-05-2001 à 11:43:07
| Fred999 a écrit a écrit  : Si ta version de SQL Server le permet, tu peux utiliser l'expression CASE. 
   | 
 
 
 
ah ouais, c'est bon ça   
  
 
Merci bôcoup Fred999, je vais essayer ça de ce pas  
Marsh Posté le 03-05-2001 à 11:55:01
POPOPOP J'AI OUBLIE LE "END" 
| Code : 
 | 
 
Désolé les gars.
Marsh Posté le 03-05-2001 à 11:58:48
pour le "END", on avait corrigé de nous même (merci quand même  
 
 
mais je suis toujours emmerdé passke SQL SERVER 7 veux pô faire d'aggrégas sur une sous-requête: 
 
en bref, un fois que j'ai récupéré cette date, je fait un DATEDIFF dessus et sur un autre date, et le tout est placé dans un AVG, vois le bordel (c'est pour des stats) 
 
Ex source: 
 
SELECT AVG( DATEDIFF(  
 	dd,  
 	(SELECT "madate" = CASE 
     when el_information_date <= sample_rec_date then sample_rec_date  
            when el_information_date > ample_rec_date then el_information_date  
       END 
 	FROM SSR), 
 	work_started_date 
 	) 
) 
FROM SSR 
WHERE (sample_rec_date IS NOT NULL) AND  
    (work_started_date IS NOT NULL)AND (el_information_date IS NOT NULL) 
 
 
je creuserai ça après bouffer  
 
 
merci encore  
Marsh Posté le 03-05-2001 à 12:25:52
Dans un topic d'il y a quelques jours, il y avait une requête où, à la place d'une liste de tables dans le FROM, tu avais une sous-requête. 
 
Si, dans la sous-requête, tu te débrouilles pour caser l'expression en CASE, tu pourras faire ton datediff() comme chez Tata dans le SELECT... 
 
thegti pourrait sûrement mieux te parler de ça que moi. 
 
Sinon pareil, je verrai ça après la bouffe.
Marsh Posté le 03-05-2001 à 15:21:26
| Fred999 a écrit a écrit  : Dans un topic d'il y a quelques jours, il y avait une requête où, à la place d'une liste de tables dans le FROM, tu avais une sous-requête. Si, dans la sous-requête, tu te débrouilles pour caser l'expression en CASE, tu pourras faire ton datediff() comme chez Tata dans le SELECT... thegti pourrait sûrement mieux te parler de ça que moi. Sinon pareil, je verrai ça après la bouffe. | 
 
le case est bien dans une sous requete et c'est ça qui marche pas 
a cause de sqlglandeur qui veut pas de avg et datediff sur une sous requete 
[edit]--Message édité par ajnag--[/edit]
Marsh Posté le 03-05-2001 à 15:53:55
Justement, remettre le case dans le FROM permettrait de faire simplement un AVG(datediff()) dans le SELECT, ce que Sybase 12 (le jumeau de SQL server) accepte parfaitement. 
Et donc, un truc du genre :; 
 
| Code : 
 | 
 
 
Et j'aimerais bien que thegti confirme!!!
[edit]--Message édité par Fred999--[/edit]
Marsh Posté le 03-05-2001 à 17:44:03
thegti, il était bien occupé aujourd'hui  
 
thegti, il dit qu'il comprends bien SQL Server qui veut pas appliquer la fonction datediff sur une sous-requête non unitaire 
thegti, il dit aussi que la solution de fred999 lui parait très correct 
Néanmoins, thegti tient a signalé qu'il peut y avoir des problèmes si on met pas de parenthèses et si on "alias" pas la sous requête 
Ici ca donne: 
SELECT AVG(DATEDIFF(dd, TMP.madate, TMP.work_started_date))   
FROM  
      ( SELECT "madate" = CASE   
                 when el_information_date <= sample_rec_date then sample_rec_date    
                 when el_information_date > ample_rec_date then el_information_date    
                 END ,  
              work_started_date  
  FROM   SSR  
  WHERE  
        sample_rec_date IS NOT NULL  
  AND    
        work_started_date IS NOT NULL  
  AND  
        el_information_date IS NOT NULL ) TMP 
 
 
PS: j'ai bien imité Alain Delon non ? 
Marsh Posté le 03-05-2001 à 18:14:50
Haaaa merci de corriger ma syntaxe, je n'ai jamais employé cette méthode au boulot. Niveau perfs, ça donne quoi? 
 
PS : ton imitation, ça sonnait nettement plus Johnny dans les Guignols...  
[edit]--Message édité par Fred999--[/edit]
Marsh Posté le 03-05-2001 à 18:24:51
Aque coucou .... ah ah ah ah 
 
Niveau perfs, c'est pareil que sans sous-requête, ca suit le même plan d'éxecution 
 
PS: me dis pas que mon imitation de johnny ressemble plus à Alain Delon ! 
Marsh Posté le 04-05-2001 à 10:34:23
merci les gars ça marche nickel
Marsh Posté le 11-05-2001 à 11:58:36
marche pas en asp mais nickel sur sqlserveur 
je comprends pas  
 
 
SELECT AVG(DATEDIFF(dd,work_started_date,madate)) FROM (SELECT madate = CASE WHEN el_information_date <= sample_rec_date THEN sample_rec_date ELSE el_information_date END, work_started_date FROM SSR WHERE ((sample_rec_date IS NOT NULL) AND (work_started_date IS NOT NULL) AND (el_information_date IS NOT NULL) AND (deletion_date IS NULL))) as TMP  
ADODB.Fields error '800a0cc1'  
 
ADO could not find the object in the collection corresponding to the name or ordinal reference requested by the application
Marsh Posté le 11-05-2001 à 15:25:20
Tu peux nous remettre la requête sous forme lisible STP? 
 
Et ce message d'erreur signifie quoi? 
 
(désolé, je connais uniquement les messages d'erreur Sybase)
Marsh Posté le 11-05-2001 à 15:55:54
SELECT AVG(DATEDIFF(dd,work_started_date,madate))  
FROM ( 
   SELECT madate = CASE WHEN el_information_date <= sample_rec_date THEN sample_rec_date  
                  ELSE el_information_date  
                   END 
         ,work_started_date  
   FROM SSR  
   WHERE ((sample_rec_date IS NOT NULL) 
   AND (work_started_date IS NOT NULL)  
   AND (el_information_date IS NOT NULL)  
   AND (deletion_date IS NULL)))  
as TMP  
 
 
ADODB.Fields error '800a0cc1'  
 
ADO could not find the object in the collection corresponding to the name or ordinal reference requested by the application
[edit]--Message édité par ajnag--[/edit]
Marsh Posté le 11-05-2001 à 16:02:48
Si la requete marche nickel sous sqlserver, a mon avis... 
penche toi sur le code asp... 
Remplace la par une requete simple (du genre ki retourne un nombre ou une date suivant ce que tu veux) 
et tu verra bien si ta tjrs l'erreur... 
Le principal c que tu sois sur que ta requete marche dans une page asp simple ...
[edit]--Message édité par wouatouwouatou--[/edit]
Marsh Posté le 11-05-2001 à 16:10:26
Franchement, je ne vois pas d'où l'erreur peut venir. Désolé 
Marsh Posté le 11-05-2001 à 16:13:32
| wouatouwouatou a écrit a écrit  : Si la requete marche nickel sous sqlserver, a mon avis... penche toi sur le code asp... Remplace la par une rquete simple (du genre ki retourne une date) et tu verra bien si ta tjrs l'erreur... | 
 
 
merci c toujours les erreurs de merde qu'on ne voit pas 
  
 
 
je suis une merde 
Marsh Posté le 11-05-2001 à 17:08:41
Sinon... 
 
select min(date_temp) date_la_plus_petite from ( 
   select date1 as date_temp from table1 
   where ... 
   union 
   select date2 as date_temp from table1 
   where ... 
) fausse_table;
Marsh Posté le 03-05-2001 à 10:55:57
Salut 
 

je cherche à récupérer (en une seule requête, pas de procédure) la date la plus récente entre deux dates dans des champs différents.
Merci d'avance
---------------
Force m'est de constater qu'il m'est de plus en plus difficile de faire coïncider mes levers tardifs et mes couchers anticipés par le biais de siestes prolongées... :D