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

  FORUM HardWare.fr
  Programmation

  [SQL SERVER] Récupérer la date la plus récente entre 2

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL SERVER] Récupérer la date la plus récente entre 2

n°28919
JayisHappy
Posté le 03-05-2001 à 10:55:57  profilanswer
 

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
mood
Publicité
Posté le 03-05-2001 à 10:55:57  profilanswer
 

n°28929
ajnag
where no man has gone before
Posté le 03-05-2001 à 11:27:16  profilanswer
 

up :??:


---------------
Chasser sans bière c'est comme... pêcher sans bière.
n°28931
Fred999
Rabat-joie
Posté le 03-05-2001 à 11:40:21  profilanswer
 

Si ta version de SQL Server le permet, tu peux utiliser l'expression CASE.

Code :
  1. select "madate" =
  2.           case
  3.           when date1 <= date2 then date2
  4.           when date2 >  date1 then date1
  5. from
  6.        matable


 
Voilou.

n°28932
ajnag
where no man has gone before
Posté le 03-05-2001 à 11:42:42  profilanswer
 

Fred999 a écrit a écrit :

Si ta version de SQL Server le permet, tu peux utiliser l'expression CASE.

Code :
  1. select "madate" =
  2.           case
  3.           when date1 <= date2 then date2
  4.           when date2 >  date1 then date1
  5. from
  6.        matable


 
Voilou.




merci fred999


---------------
Chasser sans bière c'est comme... pêcher sans bière.
n°28933
JayisHappy
Posté le 03-05-2001 à 11:43:07  profilanswer
 

Fred999 a écrit a écrit :

Si ta version de SQL Server le permet, tu peux utiliser l'expression CASE.

Code :
  1. select "madate" =
  2.           case
  3.           when date1 <= date2 then date2
  4.           when date2 >  date1 then date1
  5. from
  6.        matable


 
Voilou.




 
 
ah ouais, c'est bon ça  :D  
 
Merci bôcoup Fred999, je vais essayer ça de ce pas  ;)


---------------
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
n°28936
Fred999
Rabat-joie
Posté le 03-05-2001 à 11:55:01  profilanswer
 

POPOPOP J'AI OUBLIE LE "END"

Code :
  1. select "madate" =
  2.           case
  3.           when date1 <= date2 then date2
  4.           when date2 >  date1 then date1
  5.           END
  6. from
  7.        matable


Désolé les gars.

n°28937
JayisHappy
Posté le 03-05-2001 à 11:58:48  profilanswer
 

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


---------------
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
n°28946
Fred999
Rabat-joie
Posté le 03-05-2001 à 12:25:52  profilanswer
 

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.

n°29005
ajnag
where no man has gone before
Posté le 03-05-2001 à 15:21:26  profilanswer
 

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 :sweat:

 

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


---------------
Chasser sans bière c'est comme... pêcher sans bière.
n°29024
Fred999
Rabat-joie
Posté le 03-05-2001 à 15:53:55  profilanswer
 

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 :
  1. SELECT AVG(DATEDIFF(dd, madate, work_started_date))
  2. FROM
  3.        SELECT "madate" = CASE
  4.                  when el_information_date <= sample_rec_date then sample_rec_date 
  5.                  when el_information_date > ample_rec_date then el_information_date 
  6.                  END ,
  7.               work_started_date
  8.   FROM   SSR
  9.   WHERE
  10.         sample_rec_date IS NOT NULL
  11.   AND 
  12.         work_started_date IS NOT NULL
  13.   AND
  14.         el_information_date IS NOT NULL


 
Et j'aimerais bien que thegti confirme!!!

 

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

mood
Publicité
Posté le 03-05-2001 à 15:53:55  profilanswer
 

n°29052
thegti
La constipation se soigne ...
Posté le 03-05-2001 à 17:44:03  profilanswer
 

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 ? :D

n°29058
Fred999
Rabat-joie
Posté le 03-05-2001 à 18:14:50  profilanswer
 

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...  :crazy:

 

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

n°29062
thegti
La constipation se soigne ...
Posté le 03-05-2001 à 18:24:51  profilanswer
 

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

n°29128
ajnag
where no man has gone before
Posté le 04-05-2001 à 10:34:23  profilanswer
 

merci les gars ça marche nickel


---------------
Chasser sans bière c'est comme... pêcher sans bière.
n°30653
ajnag
where no man has gone before
Posté le 11-05-2001 à 11:58:36  profilanswer
 

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

n°30757
ajnag
where no man has gone before
Posté le 11-05-2001 à 14:35:27  profilanswer
 

up :sweat:

n°30758
JayisHappy
Posté le 11-05-2001 à 14:36:23  profilanswer
 

Up  :sweat:  :sweat:

n°30786
Fred999
Rabat-joie
Posté le 11-05-2001 à 15:25:20  profilanswer
 

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)

n°30808
ajnag
where no man has gone before
Posté le 11-05-2001 à 15:55:54  profilanswer
 

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]

n°30813
wouatouwou​atou
Posté le 11-05-2001 à 16:02:48  profilanswer
 

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]

n°30828
Fred999
Rabat-joie
Posté le 11-05-2001 à 16:10:26  profilanswer
 

Franchement, je ne vois pas d'où l'erreur peut venir. Désolé :(

n°30833
ajnag
where no man has gone before
Posté le 11-05-2001 à 16:13:32  profilanswer
 

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
 
:lol:
 
je suis une merde :D

n°30905
MagicBuzz
Posté le 11-05-2001 à 17:08:41  profilanswer
 

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;

mood
Publicité
Posté le   profilanswer
 


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

  [SQL SERVER] Récupérer la date la plus récente entre 2

 

Sujets relatifs
[SQL Server] besoin d'aide pour requete de maj[SQL] comment faire pôur...
[VC++] comment récupérer une URL avec des paramètres en méthode POST ?[SQL] : Uppercase
Recuperer la taille d'un fichier sur interent en C avec api Wininet[SQL Server] varchar <-> nvarchar
SQL et Access[SQL Server] Type text ??
Plus de sujets relatifs à : [SQL SERVER] Récupérer la date la plus récente entre 2


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