j'ai une grosse table avec des ligne contenant
une ref, un prix, une date un client
on me demande de selectionner tous les derniers prix pour un client donné.
alors moi j'ai fait un
SELECT ref, prix, max(date) from line_produit where idclient = 1234 group by
ref, prix;
sauf qu'evidement ca me sort plusieurs fois les ref si les prix on changé au
court du temps!!!
comment on fait la requete dont j'ai besoin ?
Merci.
Etienne
j'ai une grosse table avec des ligne contenant
une ref, un prix, une date un client
on me demande de selectionner tous les derniers prix pour un client donné.
alors moi j'ai fait un
SELECT ref, prix, max(date) from line_produit where idclient = 1234 group by
ref, prix;
sauf qu'evidement ca me sort plusieurs fois les ref si les prix on changé au
court du temps!!!
comment on fait la requete dont j'ai besoin ?
Merci.
Etienne
j'ai une grosse table avec des ligne contenant
une ref, un prix, une date un client
on me demande de selectionner tous les derniers prix pour un client donné.
alors moi j'ai fait un
SELECT ref, prix, max(date) from line_produit where idclient = 1234 group by
ref, prix;
sauf qu'evidement ca me sort plusieurs fois les ref si les prix on changé au
court du temps!!!
comment on fait la requete dont j'ai besoin ?
Merci.
Etienne
select l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient = 1234
group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
select l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient = 1234
group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
select l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient = 1234
group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
select l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient = 1234
group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir aussi
les prix précédents, mais ils n'en voudraient que deux ou trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en une
seule requete de sortir les 3 derniers prix d'un meme article et ca pour tous
les articles acheté par le client !
merci
Etienne
select l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient = 1234
group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir aussi
les prix précédents, mais ils n'en voudraient que deux ou trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en une
seule requete de sortir les 3 derniers prix d'un meme article et ca pour tous
les articles acheté par le client !
merci
Etienne
select l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient = 1234
group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir aussi
les prix précédents, mais ils n'en voudraient que deux ou trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en une
seule requete de sortir les 3 derniers prix d'un meme article et ca pour tous
les articles acheté par le client !
merci
Etienne
Etienne SOBOLE a écritselect l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient =
1234 group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir
aussi les prix précédents, mais ils n'en voudraient que deux ou trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en une
seule requete de sortir les 3 derniers prix d'un meme article et ca pour
tous les articles acheté par le client !
merci
Etienne
J'ai une solution assez ignoble mais qui fonctionne sous Oracle (c'est
quoi ton SGBD ?)
L'idee est de travailler avec une sous requete qui ramene un identifiant
de ligne :
On y va. Déjà :
select ref, date from line_produit where idclient = 1234
order by ref, date desc
te donne pour un client donné, la liste de tous les prix de chaque
référence, triée par date décroissante (les plus récentes en premier)
Maitenant si tu fais :
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
Tu obtiens cette meme liste prefixée avec un numéro d'ordre. Il faut
maitenant récupérer le bon n° d'ordre de chaque reference :
select min(id) as id, ref from
(
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
)
group by ref
Maintenant comme tu en veux (au maximum) 3 par reference, on va ajouter 2
à l'ID :
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
Maintenant en faisant une jointure de cette table avec la premiere on va
pouvoir récuperer les 3 derniers prix :
select prix.ref, prix.date, prix.prix
from
(
select rownum as id, ref, date, prix from
(
select ref, date, prix from line_produit where idclient = 1234
order by ref, date desc
)
) prix,
(
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
) ids
where
prix.ref = ids.ref
and prix.id <= ids.id
order by prix.ref, prix.date
Je sais, c'est ignoble :-D
(j'ai pas testé sur cette structure de table donc il y a peut etre des
frottes de fappe, mais en suivant le principe tu devrais y arriver)
Etienne SOBOLE a écrit
select l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient =
1234 group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir
aussi les prix précédents, mais ils n'en voudraient que deux ou trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en une
seule requete de sortir les 3 derniers prix d'un meme article et ca pour
tous les articles acheté par le client !
merci
Etienne
J'ai une solution assez ignoble mais qui fonctionne sous Oracle (c'est
quoi ton SGBD ?)
L'idee est de travailler avec une sous requete qui ramene un identifiant
de ligne :
On y va. Déjà :
select ref, date from line_produit where idclient = 1234
order by ref, date desc
te donne pour un client donné, la liste de tous les prix de chaque
référence, triée par date décroissante (les plus récentes en premier)
Maitenant si tu fais :
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
Tu obtiens cette meme liste prefixée avec un numéro d'ordre. Il faut
maitenant récupérer le bon n° d'ordre de chaque reference :
select min(id) as id, ref from
(
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
)
group by ref
Maintenant comme tu en veux (au maximum) 3 par reference, on va ajouter 2
à l'ID :
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
Maintenant en faisant une jointure de cette table avec la premiere on va
pouvoir récuperer les 3 derniers prix :
select prix.ref, prix.date, prix.prix
from
(
select rownum as id, ref, date, prix from
(
select ref, date, prix from line_produit where idclient = 1234
order by ref, date desc
)
) prix,
(
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
) ids
where
prix.ref = ids.ref
and prix.id <= ids.id
order by prix.ref, prix.date
Je sais, c'est ignoble :-D
(j'ai pas testé sur cette structure de table donc il y a peut etre des
frottes de fappe, mais en suivant le principe tu devrais y arriver)
Etienne SOBOLE a écritselect l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient =
1234 group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir
aussi les prix précédents, mais ils n'en voudraient que deux ou trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en une
seule requete de sortir les 3 derniers prix d'un meme article et ca pour
tous les articles acheté par le client !
merci
Etienne
J'ai une solution assez ignoble mais qui fonctionne sous Oracle (c'est
quoi ton SGBD ?)
L'idee est de travailler avec une sous requete qui ramene un identifiant
de ligne :
On y va. Déjà :
select ref, date from line_produit where idclient = 1234
order by ref, date desc
te donne pour un client donné, la liste de tous les prix de chaque
référence, triée par date décroissante (les plus récentes en premier)
Maitenant si tu fais :
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
Tu obtiens cette meme liste prefixée avec un numéro d'ordre. Il faut
maitenant récupérer le bon n° d'ordre de chaque reference :
select min(id) as id, ref from
(
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
)
group by ref
Maintenant comme tu en veux (au maximum) 3 par reference, on va ajouter 2
à l'ID :
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
Maintenant en faisant une jointure de cette table avec la premiere on va
pouvoir récuperer les 3 derniers prix :
select prix.ref, prix.date, prix.prix
from
(
select rownum as id, ref, date, prix from
(
select ref, date, prix from line_produit where idclient = 1234
order by ref, date desc
)
) prix,
(
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
) ids
where
prix.ref = ids.ref
and prix.id <= ids.id
order by prix.ref, prix.date
Je sais, c'est ignoble :-D
(j'ai pas testé sur cette structure de table donc il y a peut etre des
frottes de fappe, mais en suivant le principe tu devrais y arriver)
Ca marche presque !!!
C'est pas mal, mais ca ne marche que si j'ai au moins 3 prix !!! sinon je
passe a la référence suivante !!!
mais bon c'etait bien tenté.
laisse beton je vais faire ca a la main je pense.
Etienne
"ALain Montfranc" a écrit dans le message de news:Etienne SOBOLE a écritselect l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient >>>> 1234 group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir
aussi les prix précédents, mais ils n'en voudraient que deux ou
trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en
une
seule requete de sortir les 3 derniers prix d'un meme article et ca
pour
tous les articles acheté par le client !
merci
Etienne
J'ai une solution assez ignoble mais qui fonctionne sous Oracle (c'est
quoi ton SGBD ?)
L'idee est de travailler avec une sous requete qui ramene un identifiant
de ligne :
On y va. Déjà :
select ref, date from line_produit where idclient = 1234
order by ref, date desc
te donne pour un client donné, la liste de tous les prix de chaque
référence, triée par date décroissante (les plus récentes en premier)
Maitenant si tu fais :
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
Tu obtiens cette meme liste prefixée avec un numéro d'ordre. Il faut
maitenant récupérer le bon n° d'ordre de chaque reference :
select min(id) as id, ref from
(
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
)
group by ref
Maintenant comme tu en veux (au maximum) 3 par reference, on va ajouter
2
à l'ID :
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
Maintenant en faisant une jointure de cette table avec la premiere on va
pouvoir récuperer les 3 derniers prix :
select prix.ref, prix.date, prix.prix
from
(
select rownum as id, ref, date, prix from
(
select ref, date, prix from line_produit where idclient = 1234
order by ref, date desc
)
) prix,
(
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
) ids
where
prix.ref = ids.ref
and prix.id <= ids.id
order by prix.ref, prix.date
Je sais, c'est ignoble :-D
(j'ai pas testé sur cette structure de table donc il y a peut etre des
frottes de fappe, mais en suivant le principe tu devrais y arriver)
Ca marche presque !!!
C'est pas mal, mais ca ne marche que si j'ai au moins 3 prix !!! sinon je
passe a la référence suivante !!!
mais bon c'etait bien tenté.
laisse beton je vais faire ca a la main je pense.
Etienne
"ALain Montfranc" <x@x.con> a écrit dans le message de news:
mn.a3c17d79e67701be.51095@x.con...
Etienne SOBOLE a écrit
select l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient >>>> 1234 group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir
aussi les prix précédents, mais ils n'en voudraient que deux ou
trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en
une
seule requete de sortir les 3 derniers prix d'un meme article et ca
pour
tous les articles acheté par le client !
merci
Etienne
J'ai une solution assez ignoble mais qui fonctionne sous Oracle (c'est
quoi ton SGBD ?)
L'idee est de travailler avec une sous requete qui ramene un identifiant
de ligne :
On y va. Déjà :
select ref, date from line_produit where idclient = 1234
order by ref, date desc
te donne pour un client donné, la liste de tous les prix de chaque
référence, triée par date décroissante (les plus récentes en premier)
Maitenant si tu fais :
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
Tu obtiens cette meme liste prefixée avec un numéro d'ordre. Il faut
maitenant récupérer le bon n° d'ordre de chaque reference :
select min(id) as id, ref from
(
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
)
group by ref
Maintenant comme tu en veux (au maximum) 3 par reference, on va ajouter
2
à l'ID :
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
Maintenant en faisant une jointure de cette table avec la premiere on va
pouvoir récuperer les 3 derniers prix :
select prix.ref, prix.date, prix.prix
from
(
select rownum as id, ref, date, prix from
(
select ref, date, prix from line_produit where idclient = 1234
order by ref, date desc
)
) prix,
(
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
) ids
where
prix.ref = ids.ref
and prix.id <= ids.id
order by prix.ref, prix.date
Je sais, c'est ignoble :-D
(j'ai pas testé sur cette structure de table donc il y a peut etre des
frottes de fappe, mais en suivant le principe tu devrais y arriver)
Ca marche presque !!!
C'est pas mal, mais ca ne marche que si j'ai au moins 3 prix !!! sinon je
passe a la référence suivante !!!
mais bon c'etait bien tenté.
laisse beton je vais faire ca a la main je pense.
Etienne
"ALain Montfranc" a écrit dans le message de news:Etienne SOBOLE a écritselect l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient >>>> 1234 group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir
aussi les prix précédents, mais ils n'en voudraient que deux ou
trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en
une
seule requete de sortir les 3 derniers prix d'un meme article et ca
pour
tous les articles acheté par le client !
merci
Etienne
J'ai une solution assez ignoble mais qui fonctionne sous Oracle (c'est
quoi ton SGBD ?)
L'idee est de travailler avec une sous requete qui ramene un identifiant
de ligne :
On y va. Déjà :
select ref, date from line_produit where idclient = 1234
order by ref, date desc
te donne pour un client donné, la liste de tous les prix de chaque
référence, triée par date décroissante (les plus récentes en premier)
Maitenant si tu fais :
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
Tu obtiens cette meme liste prefixée avec un numéro d'ordre. Il faut
maitenant récupérer le bon n° d'ordre de chaque reference :
select min(id) as id, ref from
(
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
)
group by ref
Maintenant comme tu en veux (au maximum) 3 par reference, on va ajouter
2
à l'ID :
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
Maintenant en faisant une jointure de cette table avec la premiere on va
pouvoir récuperer les 3 derniers prix :
select prix.ref, prix.date, prix.prix
from
(
select rownum as id, ref, date, prix from
(
select ref, date, prix from line_produit where idclient = 1234
order by ref, date desc
)
) prix,
(
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
) ids
where
prix.ref = ids.ref
and prix.id <= ids.id
order by prix.ref, prix.date
Je sais, c'est ignoble :-D
(j'ai pas testé sur cette structure de table donc il y a peut etre des
frottes de fappe, mais en suivant le principe tu devrais y arriver)
Le Thu, 20 Sep 2007 16:36:04 +0200, Etienne SOBOLE a
écrit:Ca marche presque !!!
C'est pas mal, mais ca ne marche que si j'ai au moins 3 prix !!! sinon je
passe a la référence suivante !!!
mais bon c'etait bien tenté.
laisse beton je vais faire ca a la main je pense.
Etienne
"ALain Montfranc" a écrit dans le message de news:Etienne SOBOLE a écritselect l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient >>>>> 1234 group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir
aussi les prix précédents, mais ils n'en voudraient que deux ou
trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en
une
seule requete de sortir les 3 derniers prix d'un meme article et ca
pour
tous les articles acheté par le client !
merci
Etienne
J'ai une solution assez ignoble mais qui fonctionne sous Oracle (c'est
quoi ton SGBD ?)
L'idee est de travailler avec une sous requete qui ramene un identifiant
de ligne :
On y va. Déjà :
select ref, date from line_produit where idclient = 1234
order by ref, date desc
te donne pour un client donné, la liste de tous les prix de chaque
référence, triée par date décroissante (les plus récentes en premier)
Maitenant si tu fais :
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
Tu obtiens cette meme liste prefixée avec un numéro d'ordre. Il faut
maitenant récupérer le bon n° d'ordre de chaque reference :
select min(id) as id, ref from
(
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
)
group by ref
Maintenant comme tu en veux (au maximum) 3 par reference, on va ajouter
2
à l'ID :
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
Maintenant en faisant une jointure de cette table avec la premiere on va
pouvoir récuperer les 3 derniers prix :
select prix.ref, prix.date, prix.prix
from
(
select rownum as id, ref, date, prix from
(
select ref, date, prix from line_produit where idclient = 1234
order by ref, date desc
)
) prix,
(
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
) ids
where
prix.ref = ids.ref
and prix.id <= ids.id
order by prix.ref, prix.date
Je sais, c'est ignoble :-D
(j'ai pas testé sur cette structure de table donc il y a peut etre des
frottes de fappe, mais en suivant le principe tu devrais y arriver)
Pouvez-vous cependant indiquer sur quel SGBD vous tournez ???
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Thu, 20 Sep 2007 16:36:04 +0200, Etienne SOBOLE <etienne@trash.com> a
écrit:
Ca marche presque !!!
C'est pas mal, mais ca ne marche que si j'ai au moins 3 prix !!! sinon je
passe a la référence suivante !!!
mais bon c'etait bien tenté.
laisse beton je vais faire ca a la main je pense.
Etienne
"ALain Montfranc" <x@x.con> a écrit dans le message de news:
mn.a3c17d79e67701be.51095@x.con...
Etienne SOBOLE a écrit
select l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient >>>>> 1234 group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir
aussi les prix précédents, mais ils n'en voudraient que deux ou
trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en
une
seule requete de sortir les 3 derniers prix d'un meme article et ca
pour
tous les articles acheté par le client !
merci
Etienne
J'ai une solution assez ignoble mais qui fonctionne sous Oracle (c'est
quoi ton SGBD ?)
L'idee est de travailler avec une sous requete qui ramene un identifiant
de ligne :
On y va. Déjà :
select ref, date from line_produit where idclient = 1234
order by ref, date desc
te donne pour un client donné, la liste de tous les prix de chaque
référence, triée par date décroissante (les plus récentes en premier)
Maitenant si tu fais :
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
Tu obtiens cette meme liste prefixée avec un numéro d'ordre. Il faut
maitenant récupérer le bon n° d'ordre de chaque reference :
select min(id) as id, ref from
(
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
)
group by ref
Maintenant comme tu en veux (au maximum) 3 par reference, on va ajouter
2
à l'ID :
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
Maintenant en faisant une jointure de cette table avec la premiere on va
pouvoir récuperer les 3 derniers prix :
select prix.ref, prix.date, prix.prix
from
(
select rownum as id, ref, date, prix from
(
select ref, date, prix from line_produit where idclient = 1234
order by ref, date desc
)
) prix,
(
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
) ids
where
prix.ref = ids.ref
and prix.id <= ids.id
order by prix.ref, prix.date
Je sais, c'est ignoble :-D
(j'ai pas testé sur cette structure de table donc il y a peut etre des
frottes de fappe, mais en suivant le principe tu devrais y arriver)
Pouvez-vous cependant indiquer sur quel SGBD vous tournez ???
--
Gilles TOURREAU
gilles.tourreau@pos.fr
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Thu, 20 Sep 2007 16:36:04 +0200, Etienne SOBOLE a
écrit:Ca marche presque !!!
C'est pas mal, mais ca ne marche que si j'ai au moins 3 prix !!! sinon je
passe a la référence suivante !!!
mais bon c'etait bien tenté.
laisse beton je vais faire ca a la main je pense.
Etienne
"ALain Montfranc" a écrit dans le message de news:Etienne SOBOLE a écritselect l.ref, l.prix, l.date
from
line_produit l,
( select ref, max(date) as date from line_produit where idclient >>>>> 1234 group by ref) d
where
l.ref = d.ref and l.date = d.date and idclient = 1234
Super c'est tout bon merci.
Mais alors j'ai un nouveau probleme,
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir
aussi les prix précédents, mais ils n'en voudraient que deux ou
trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en
une
seule requete de sortir les 3 derniers prix d'un meme article et ca
pour
tous les articles acheté par le client !
merci
Etienne
J'ai une solution assez ignoble mais qui fonctionne sous Oracle (c'est
quoi ton SGBD ?)
L'idee est de travailler avec une sous requete qui ramene un identifiant
de ligne :
On y va. Déjà :
select ref, date from line_produit where idclient = 1234
order by ref, date desc
te donne pour un client donné, la liste de tous les prix de chaque
référence, triée par date décroissante (les plus récentes en premier)
Maitenant si tu fais :
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
Tu obtiens cette meme liste prefixée avec un numéro d'ordre. Il faut
maitenant récupérer le bon n° d'ordre de chaque reference :
select min(id) as id, ref from
(
select rownum as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
)
group by ref
Maintenant comme tu en veux (au maximum) 3 par reference, on va ajouter
2
à l'ID :
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
Maintenant en faisant une jointure de cette table avec la premiere on va
pouvoir récuperer les 3 derniers prix :
select prix.ref, prix.date, prix.prix
from
(
select rownum as id, ref, date, prix from
(
select ref, date, prix from line_produit where idclient = 1234
order by ref, date desc
)
) prix,
(
select min(id)+2 as id, ref from
(
select ref, date from line_produit where idclient = 1234
order by ref, date desc
)
group by ref
) ids
where
prix.ref = ids.ref
and prix.id <= ids.id
order by prix.ref, prix.date
Je sais, c'est ignoble :-D
(j'ai pas testé sur cette structure de table donc il y a peut etre des
frottes de fappe, mais en suivant le principe tu devrais y arriver)
Pouvez-vous cependant indiquer sur quel SGBD vous tournez ???
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Ca marche presque !!!
C'est pas mal, mais ca ne marche que si j'ai au moins 3 prix !!! sinon je
passe a la référence suivante !!!
Ca marche presque !!!
C'est pas mal, mais ca ne marche que si j'ai au moins 3 prix !!! sinon je
passe a la référence suivante !!!
Ca marche presque !!!
C'est pas mal, mais ca ne marche que si j'ai au moins 3 prix !!! sinon je
passe a la référence suivante !!!
POSTGRESQL
rownum n'existe pas, mais peut etre crée a partir d'une sequence.
POSTGRESQL
rownum n'existe pas, mais peut etre crée a partir d'une sequence.
POSTGRESQL
rownum n'existe pas, mais peut etre crée a partir d'une sequence.
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir aussi
les prix précédents, mais ils n'en voudraient que deux ou trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en une
seule requete de sortir les 3 derniers prix d'un meme article et ca pour
tous les articles acheté par le client !
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir aussi
les prix précédents, mais ils n'en voudraient que deux ou trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en une
seule requete de sortir les 3 derniers prix d'un meme article et ca pour
tous les articles acheté par le client !
vu que ma requete plantait finalement ils ont trouvé ca sympa d'avoir aussi
les prix précédents, mais ils n'en voudraient que deux ou trois...
donc, et la, ca semble quand meme plus compliqué, est il possible en une
seule requete de sortir les 3 derniers prix d'un meme article et ca pour
tous les articles acheté par le client !