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