Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème d'écriture d'une requête

2 réponses
Avatar
jerome
Bonjour,

Je suis un peu perdu dans une requete qui, je pense doit être plus simple
que ce que j'ai fait.
J'ai (sommairement) une table commande avec comme colonnes
marchandise
qte
date arrivage

Quelque chose du genre
MAR_ID QTE DATE_ARRIVAGE SOLDE_CMD
1 10 01/02/2008 0
(cas commande annulée)
2 20 01/02/2008 10
1 15 01/03/2008 15
1 10 01/04/2008 10
2 10 01/03/2008 10

Je souhaiterais obtenir pour chaque marchandise la plus petite date
d'arrivage supérieure à la date du jour et dont le solde soit positif
(sans passer par des tables temporaires et des boucles comme je le fais pour
l'instant...)
Avoir comme résultat

MAR_ID QTE DATE_ARRIVAGE SOLDE_CMD

1 15 01/03/2008 15
2 20 01/02/2008 10


Merci

2 réponses

Avatar
Fred BROUARD
CREATE TABLE commande
(MAR_ID INT,
QTE INT,
DATE_ARRIVAGE DATETIME,
SOLDE_CMD INT)

INSERT INTO commande VALUES (1, 10, '01/02/2008', 0)
INSERT INTO commande VALUES (2, 20, '01/02/2008', 10)
INSERT INTO commande VALUES (1, 15, '01/03/2008', 15)
INSERT INTO commande VALUES (1, 10, '01/04/2008', 10)
INSERT INTO commande VALUES (2, 10, '01/03/2008', 10)

SELECT C1.*
FROM commande C1
INNER JOIN (SELECT MAR_ID, MIN(DATE_ARRIVAGE) AS PREMIER_ARRIVAGE
FROM commande
WHERE DATE_ARRIVAGE > CURRENT_TIMESTAMP
AND SOLDE_CMD > 0
GROUP BY MAR_ID) C2
ON C1.MAR_ID = C2.MAR_ID
AND C1.DATE_ARRIVAGE = C2.PREMIER_ARRIVAGE

MAR_ID QTE DATE_ARRIVAGE SOLDE_CMD
--------- ------- ----------------------------- -----------
1 15 2008-03-01 00:00:00.000 15
2 20 2008-02-01 00:00:00.000 10


jerome a écrit :
Bonjour,

Je suis un peu perdu dans une requete qui, je pense doit être plus simple
que ce que j'ai fait.
J'ai (sommairement) une table commande avec comme colonnes
marchandise
qte
date arrivage

Quelque chose du genre
MAR_ID QTE DATE_ARRIVAGE SOLDE_CMD
1 10 01/02/2008 0
(cas commande annulée)
2 20 01/02/2008 10
1 15 01/03/2008 15
1 10 01/04/2008 10
2 10 01/03/2008 10

Je souhaiterais obtenir pour chaque marchandise la plus petite date
d'arrivage supérieure à la date du jour et dont le solde soit positif
(sans passer par des tables temporaires et des boucles comme je le fais pour
l'instant...)
Avoir comme résultat

MAR_ID QTE DATE_ARRIVAGE SOLDE_CMD

1 15 01/03/2008 15
2 20 01/02/2008 10


Merci








--
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
*********************** http://www.sqlspot.com *************************
Avatar
jerome
Merci beaucoup

"Fred BROUARD" wrote in message
news:%23AkZ5b%

CREATE TABLE commande
(MAR_ID INT,
QTE INT,
DATE_ARRIVAGE DATETIME,
SOLDE_CMD INT)

INSERT INTO commande VALUES (1, 10, '01/02/2008', 0)
INSERT INTO commande VALUES (2, 20, '01/02/2008', 10)
INSERT INTO commande VALUES (1, 15, '01/03/2008', 15)
INSERT INTO commande VALUES (1, 10, '01/04/2008', 10)
INSERT INTO commande VALUES (2, 10, '01/03/2008', 10)

SELECT C1.*
FROM commande C1
INNER JOIN (SELECT MAR_ID, MIN(DATE_ARRIVAGE) AS PREMIER_ARRIVAGE
FROM commande
WHERE DATE_ARRIVAGE > CURRENT_TIMESTAMP
AND SOLDE_CMD > 0
GROUP BY MAR_ID) C2
ON C1.MAR_ID = C2.MAR_ID
AND C1.DATE_ARRIVAGE = C2.PREMIER_ARRIVAGE

MAR_ID QTE DATE_ARRIVAGE SOLDE_CMD
--------- ------- ----------------------------- -----------
1 15 2008-03-01 00:00:00.000 15
2 20 2008-02-01 00:00:00.000 10


jerome a écrit :
> Bonjour,
>
> Je suis un peu perdu dans une requete qui, je pense doit être plus


simple
> que ce que j'ai fait.
> J'ai (sommairement) une table commande avec comme colonnes
> marchandise
> qte
> date arrivage
>
> Quelque chose du genre
> MAR_ID QTE DATE_ARRIVAGE SOLDE_CMD
> 1 10 01/02/2008 0
> (cas commande annulée)
> 2 20 01/02/2008 10
> 1 15 01/03/2008 15
> 1 10 01/04/2008 10
> 2 10 01/03/2008 10
>
> Je souhaiterais obtenir pour chaque marchandise la plus petite date
> d'arrivage supérieure à la date du jour et dont le solde soit positif
> (sans passer par des tables temporaires et des boucles comme je le fais


pour
> l'instant...)
> Avoir comme résultat
>
> MAR_ID QTE DATE_ARRIVAGE SOLDE_CMD
>
> 1 15 01/03/2008 15
> 2 20 01/02/2008 10
>
>
> Merci
>
>
>
>


--
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
*********************** http://www.sqlspot.com *************************