Bonjour,
J'ai une table marchandise
MARC_ID int
MARC_LIBELLE varchar(80)
....
Une table mouvement
MOUV_ID int
MARC_ID int
MOUV_DATE datetime
MOUV_PA decimal(18,2)
MOUV_PR decimal (18,2)
....
La table mouvement recensant tous les mouvements de la table marchandise.
J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
marchandises.
Si je fais
select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
mv_MOUV_PR
from MARCHANDISE m
left outer join (select top 1 * from mouvement order by MOUV_DATE desc) mv
on m.MARC_ID=mv.MARC_ID
je n'obtiens évidemment que le dernier mouvement de la table et non le
dernier mouvement pour chaque article
Si je fais left outer join (select top 1 * from mouvement where
m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
quelque chose du genre
select distinct
m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > m.MARC_ID order by mv.MOUV_DATE desc),
MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc),
MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc)
from MARCHANDISE m
Comment puis-je faire ?
Merci par avance
Bonjour,
J'ai une table marchandise
MARC_ID int
MARC_LIBELLE varchar(80)
....
Une table mouvement
MOUV_ID int
MARC_ID int
MOUV_DATE datetime
MOUV_PA decimal(18,2)
MOUV_PR decimal (18,2)
....
La table mouvement recensant tous les mouvements de la table marchandise.
J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
marchandises.
Si je fais
select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
mv_MOUV_PR
from MARCHANDISE m
left outer join (select top 1 * from mouvement order by MOUV_DATE desc) mv
on m.MARC_ID=mv.MARC_ID
je n'obtiens évidemment que le dernier mouvement de la table et non le
dernier mouvement pour chaque article
Si je fais left outer join (select top 1 * from mouvement where
m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
quelque chose du genre
select distinct
m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > m.MARC_ID order by mv.MOUV_DATE desc),
MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc),
MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc)
from MARCHANDISE m
Comment puis-je faire ?
Merci par avance
Bonjour,
J'ai une table marchandise
MARC_ID int
MARC_LIBELLE varchar(80)
....
Une table mouvement
MOUV_ID int
MARC_ID int
MOUV_DATE datetime
MOUV_PA decimal(18,2)
MOUV_PR decimal (18,2)
....
La table mouvement recensant tous les mouvements de la table marchandise.
J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
marchandises.
Si je fais
select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
mv_MOUV_PR
from MARCHANDISE m
left outer join (select top 1 * from mouvement order by MOUV_DATE desc) mv
on m.MARC_ID=mv.MARC_ID
je n'obtiens évidemment que le dernier mouvement de la table et non le
dernier mouvement pour chaque article
Si je fais left outer join (select top 1 * from mouvement where
m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
quelque chose du genre
select distinct
m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > m.MARC_ID order by mv.MOUV_DATE desc),
MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc),
MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc)
from MARCHANDISE m
Comment puis-je faire ?
Merci par avance
Bonjour,
Essayez ceci (non testé)
SELECT
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION,
MAX(m2.MOUV_DATE) AS MOUV_DATE,
MAX(m3.MOUV_PA) AS MOUV_PA,
MAX(m4.MOUV_PR) AS MOUV_PR
FROM
MARCHANDISE m
LEFT OUTER JOIN
MOUVEMENT m2
ON
m.MARC_ID = m2.MARC_ID
LEFT OUTER JOIN
MOUVMENT m3
ON
m.MARC_ID = m3.MARC_ID
LEFT OUTER JOIN
MOUVMENT m4
ON
m.MARC_ID = m4.MARC_ID
GROUP BY
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION
ORDER BY
m.MARC_CODEARTICLE
HTH,
"jack" a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ....
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ....
>
> La table mouvement recensant tous les mouvements de la table
>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>
>
Bonjour,
Essayez ceci (non testé)
SELECT
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION,
MAX(m2.MOUV_DATE) AS MOUV_DATE,
MAX(m3.MOUV_PA) AS MOUV_PA,
MAX(m4.MOUV_PR) AS MOUV_PR
FROM
MARCHANDISE m
LEFT OUTER JOIN
MOUVEMENT m2
ON
m.MARC_ID = m2.MARC_ID
LEFT OUTER JOIN
MOUVMENT m3
ON
m.MARC_ID = m3.MARC_ID
LEFT OUTER JOIN
MOUVMENT m4
ON
m.MARC_ID = m4.MARC_ID
GROUP BY
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION
ORDER BY
m.MARC_CODEARTICLE
HTH,
"jack" a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ....
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ....
>
> La table mouvement recensant tous les mouvements de la table
>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>
>
Bonjour,
Essayez ceci (non testé)
SELECT
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION,
MAX(m2.MOUV_DATE) AS MOUV_DATE,
MAX(m3.MOUV_PA) AS MOUV_PA,
MAX(m4.MOUV_PR) AS MOUV_PR
FROM
MARCHANDISE m
LEFT OUTER JOIN
MOUVEMENT m2
ON
m.MARC_ID = m2.MARC_ID
LEFT OUTER JOIN
MOUVMENT m3
ON
m.MARC_ID = m3.MARC_ID
LEFT OUTER JOIN
MOUVMENT m4
ON
m.MARC_ID = m4.MARC_ID
GROUP BY
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION
ORDER BY
m.MARC_CODEARTICLE
HTH,
"jack" a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ....
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ....
>
> La table mouvement recensant tous les mouvements de la table
>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>
>
Bonjour,
Ca risque de me renvoyer le plus grand MOUV_PA et MOUV_PR des mouvements
mais pas le MOUV_PA et MOUV_PR correspondant au plus grand MOUV_DATE (le
max(MOUV_DATE))
Non ?
"OokieDookie" wrote in message
news:Bonjour,
Essayez ceci (non testé)
SELECT
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION,
MAX(m2.MOUV_DATE) AS MOUV_DATE,
MAX(m3.MOUV_PA) AS MOUV_PA,
MAX(m4.MOUV_PR) AS MOUV_PR
FROM
MARCHANDISE m
LEFT OUTER JOIN
MOUVEMENT m2
ON
m.MARC_ID = m2.MARC_ID
LEFT OUTER JOIN
MOUVMENT m3
ON
m.MARC_ID = m3.MARC_ID
LEFT OUTER JOIN
MOUVMENT m4
ON
m.MARC_ID = m4.MARC_ID
GROUP BY
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION
ORDER BY
m.MARC_CODEARTICLE
HTH,
"jack" a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ....
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ....
>
> La table mouvement recensant tous les mouvements de la table
marchandise.>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
mv> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID >> > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID > m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID > m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>
>
Bonjour,
Ca risque de me renvoyer le plus grand MOUV_PA et MOUV_PR des mouvements
mais pas le MOUV_PA et MOUV_PR correspondant au plus grand MOUV_DATE (le
max(MOUV_DATE))
Non ?
"OokieDookie" <sorrynospam@nowhere.com> wrote in message
news:1C88032A-1504-41CA-BFAA-3F1DB5D0ED8F@microsoft.com...
Bonjour,
Essayez ceci (non testé)
SELECT
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION,
MAX(m2.MOUV_DATE) AS MOUV_DATE,
MAX(m3.MOUV_PA) AS MOUV_PA,
MAX(m4.MOUV_PR) AS MOUV_PR
FROM
MARCHANDISE m
LEFT OUTER JOIN
MOUVEMENT m2
ON
m.MARC_ID = m2.MARC_ID
LEFT OUTER JOIN
MOUVMENT m3
ON
m.MARC_ID = m3.MARC_ID
LEFT OUTER JOIN
MOUVMENT m4
ON
m.MARC_ID = m4.MARC_ID
GROUP BY
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION
ORDER BY
m.MARC_CODEARTICLE
HTH,
"jack" a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ....
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ....
>
> La table mouvement recensant tous les mouvements de la table
marchandise.
>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
mv
> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID >> > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID > m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID > m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>
>
Bonjour,
Ca risque de me renvoyer le plus grand MOUV_PA et MOUV_PR des mouvements
mais pas le MOUV_PA et MOUV_PR correspondant au plus grand MOUV_DATE (le
max(MOUV_DATE))
Non ?
"OokieDookie" wrote in message
news:Bonjour,
Essayez ceci (non testé)
SELECT
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION,
MAX(m2.MOUV_DATE) AS MOUV_DATE,
MAX(m3.MOUV_PA) AS MOUV_PA,
MAX(m4.MOUV_PR) AS MOUV_PR
FROM
MARCHANDISE m
LEFT OUTER JOIN
MOUVEMENT m2
ON
m.MARC_ID = m2.MARC_ID
LEFT OUTER JOIN
MOUVMENT m3
ON
m.MARC_ID = m3.MARC_ID
LEFT OUTER JOIN
MOUVMENT m4
ON
m.MARC_ID = m4.MARC_ID
GROUP BY
m.MARC_ID,
m.MARC_CODETRI,
m.MARC_CODEARTICLE,
m.MARC_DESIGNATION
ORDER BY
m.MARC_CODEARTICLE
HTH,
"jack" a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ....
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ....
>
> La table mouvement recensant tous les mouvements de la table
marchandise.>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
mv> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID >> > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID > m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID > m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>
>
Bonjour,
J'ai une table marchandise
MARC_ID int
MARC_LIBELLE varchar(80)
...
Une table mouvement
MOUV_ID int
MARC_ID int
MOUV_DATE datetime
MOUV_PA decimal(18,2)
MOUV_PR decimal (18,2)
...
La table mouvement recensant tous les mouvements de la table marchandise.
J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
marchandises.
Si je fais
select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
mv_MOUV_PR
from MARCHANDISE m
left outer join (select top 1 * from mouvement order by MOUV_DATE desc) mv
on m.MARC_ID=mv.MARC_ID
je n'obtiens évidemment que le dernier mouvement de la table et non le
dernier mouvement pour chaque article
Si je fais left outer join (select top 1 * from mouvement where
m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
quelque chose du genre
select distinct
m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > m.MARC_ID order by mv.MOUV_DATE desc),
MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc),
MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc)
from MARCHANDISE m
Comment puis-je faire ?
Merci par avance
Bonjour,
J'ai une table marchandise
MARC_ID int
MARC_LIBELLE varchar(80)
...
Une table mouvement
MOUV_ID int
MARC_ID int
MOUV_DATE datetime
MOUV_PA decimal(18,2)
MOUV_PR decimal (18,2)
...
La table mouvement recensant tous les mouvements de la table marchandise.
J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
marchandises.
Si je fais
select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
mv_MOUV_PR
from MARCHANDISE m
left outer join (select top 1 * from mouvement order by MOUV_DATE desc) mv
on m.MARC_ID=mv.MARC_ID
je n'obtiens évidemment que le dernier mouvement de la table et non le
dernier mouvement pour chaque article
Si je fais left outer join (select top 1 * from mouvement where
m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
quelque chose du genre
select distinct
m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > m.MARC_ID order by mv.MOUV_DATE desc),
MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc),
MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc)
from MARCHANDISE m
Comment puis-je faire ?
Merci par avance
Bonjour,
J'ai une table marchandise
MARC_ID int
MARC_LIBELLE varchar(80)
...
Une table mouvement
MOUV_ID int
MARC_ID int
MOUV_DATE datetime
MOUV_PA decimal(18,2)
MOUV_PR decimal (18,2)
...
La table mouvement recensant tous les mouvements de la table marchandise.
J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
marchandises.
Si je fais
select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
mv_MOUV_PR
from MARCHANDISE m
left outer join (select top 1 * from mouvement order by MOUV_DATE desc) mv
on m.MARC_ID=mv.MARC_ID
je n'obtiens évidemment que le dernier mouvement de la table et non le
dernier mouvement pour chaque article
Si je fais left outer join (select top 1 * from mouvement where
m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
quelque chose du genre
select distinct
m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > m.MARC_ID order by mv.MOUV_DATE desc),
MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc),
MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID = m.MARC_ID
order by mv.MOUV_DATE desc)
from MARCHANDISE m
Comment puis-je faire ?
Merci par avance
En principe ceci devrait suffire :
SELECT MVT.*, MARC_LIBELLE
FROM mouvement AS MVT
INNER JOIN (SELECT MC.MARC_ID, MC.MARC_LIBELLE, MV.MAX_DATE
FROM marchandise AS MC
INNER JOIN (SELECT M.MARC_ID, MAX(MOUV_DATE)
AS MAX_DATE
FROM mouvement AS M
GROUP BY M.MARC_ID) AS MV
ON MC.MARC_ID = MV.MARC_ID ) AS T
ON MVT.MARC_ID = T.MARC_ID
AND MVT.MOUV_DATE = T.MAX_DATE
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
jack a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ...
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ...
>
> La table mouvement recensant tous les mouvements de la table
>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>
En principe ceci devrait suffire :
SELECT MVT.*, MARC_LIBELLE
FROM mouvement AS MVT
INNER JOIN (SELECT MC.MARC_ID, MC.MARC_LIBELLE, MV.MAX_DATE
FROM marchandise AS MC
INNER JOIN (SELECT M.MARC_ID, MAX(MOUV_DATE)
AS MAX_DATE
FROM mouvement AS M
GROUP BY M.MARC_ID) AS MV
ON MC.MARC_ID = MV.MARC_ID ) AS T
ON MVT.MARC_ID = T.MARC_ID
AND MVT.MOUV_DATE = T.MAX_DATE
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
jack a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ...
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ...
>
> La table mouvement recensant tous les mouvements de la table
>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>
En principe ceci devrait suffire :
SELECT MVT.*, MARC_LIBELLE
FROM mouvement AS MVT
INNER JOIN (SELECT MC.MARC_ID, MC.MARC_LIBELLE, MV.MAX_DATE
FROM marchandise AS MC
INNER JOIN (SELECT M.MARC_ID, MAX(MOUV_DATE)
AS MAX_DATE
FROM mouvement AS M
GROUP BY M.MARC_ID) AS MV
ON MC.MARC_ID = MV.MARC_ID ) AS T
ON MVT.MARC_ID = T.MARC_ID
AND MVT.MOUV_DATE = T.MAX_DATE
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
jack a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ...
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ...
>
> La table mouvement recensant tous les mouvements de la table
>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>
En principe ceci devrait suffire :
SELECT MVT.*, MARC_LIBELLE
FROM mouvement AS MVT
INNER JOIN (SELECT MC.MARC_ID, MC.MARC_LIBELLE, MV.MAX_DATE
FROM marchandise AS MC
INNER JOIN (SELECT M.MARC_ID, MAX(MOUV_DATE)
AS MAX_DATE
FROM mouvement AS M
GROUP BY M.MARC_ID) AS MV
ON MC.MARC_ID = MV.MARC_ID ) AS T
ON MVT.MARC_ID = T.MARC_ID
AND MVT.MOUV_DATE = T.MAX_DATE
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
jack a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ...
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ...
>
> La table mouvement recensant tous les mouvements de la table
>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>
En principe ceci devrait suffire :
SELECT MVT.*, MARC_LIBELLE
FROM mouvement AS MVT
INNER JOIN (SELECT MC.MARC_ID, MC.MARC_LIBELLE, MV.MAX_DATE
FROM marchandise AS MC
INNER JOIN (SELECT M.MARC_ID, MAX(MOUV_DATE)
AS MAX_DATE
FROM mouvement AS M
GROUP BY M.MARC_ID) AS MV
ON MC.MARC_ID = MV.MARC_ID ) AS T
ON MVT.MARC_ID = T.MARC_ID
AND MVT.MOUV_DATE = T.MAX_DATE
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
jack a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ...
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ...
>
> La table mouvement recensant tous les mouvements de la table
>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>
En principe ceci devrait suffire :
SELECT MVT.*, MARC_LIBELLE
FROM mouvement AS MVT
INNER JOIN (SELECT MC.MARC_ID, MC.MARC_LIBELLE, MV.MAX_DATE
FROM marchandise AS MC
INNER JOIN (SELECT M.MARC_ID, MAX(MOUV_DATE)
AS MAX_DATE
FROM mouvement AS M
GROUP BY M.MARC_ID) AS MV
ON MC.MARC_ID = MV.MARC_ID ) AS T
ON MVT.MARC_ID = T.MARC_ID
AND MVT.MOUV_DATE = T.MAX_DATE
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
jack a écrit :
> Bonjour,
>
> J'ai une table marchandise
> MARC_ID int
> MARC_LIBELLE varchar(80)
> ...
>
> Une table mouvement
>
> MOUV_ID int
> MARC_ID int
> MOUV_DATE datetime
> MOUV_PA decimal(18,2)
> MOUV_PR decimal (18,2)
> ...
>
> La table mouvement recensant tous les mouvements de la table
>
> J'essaie d'obtenir les dernières dates de mouvement, PA et PR pour les
> marchandises.
> Si je fais
>
> select distinct m.MARC_ID, m.MARC_LIBELLE, mv.MOUV_DATE, mv._MOUV_PA ,
> mv_MOUV_PR
> from MARCHANDISE m
> left outer join (select top 1 * from mouvement order by MOUV_DATE desc)
> on m.MARC_ID=mv.MARC_ID
>
> je n'obtiens évidemment que le dernier mouvement de la table et non le
> dernier mouvement pour chaque article
>
> Si je fais left outer join (select top 1 * from mouvement where
> m1.MARC_ID=m.MARC_ID order by MOUV_DATE desc) mv
> Ca ne marche pas non plus (le deuxième m.MARC_ID est inconnu)
>
>
> Et je voudrais éviter d'avoir à faire 3 fois la même requête en mettant
> quelque chose du genre
>
> select distinct
> m.MARC_ID,m.MARC_CODETRI,m.MARC_CODEARTICLE,m.MARC_DESIGNATION,
>
> MOUV_DATE=(select top 1 MOUV_DATE from mouvement mv where mv.MARC_ID > > m.MARC_ID order by mv.MOUV_DATE desc),
> MARC_PA=(select top 1 MOUV_PA from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc),
> MARC_PR=(select top 1 MOUV_PR from mouvement mv where mv.MARC_ID m.MARC_ID
> order by mv.MOUV_DATE desc)
> from MARCHANDISE m
>
>
> Comment puis-je faire ?
>
> Merci par avance
>
>