1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| CREATE TABLE article
(
id_article int NOT NULL IDENTITY CONSTRAINT PK_article PRIMARY KEY
, nom_article varchar(64) NOT NULL CONSTRAINT UQ_article__nom_article UNIQUE
)
GO
CREATE TABLE commande
(
id_commande bigint NOT NULL IDENTITY CONSTRAINT PK_commande PRIMARY KEY
, id_article int NOT NULL CONSTRAINT FK_commande__id_article FOREIGN KEY (id_article) REFERENCES article
, quantite_article numeric(10,2) NOT NULL CONSTRAINT CHK_commande__quantite CHECK (quantite_article > 0.0)
, date_commande datetime NOT NULL CONSTRAINT DF_commande__date_commande DEFAULT (GETDATE())
)
GO
INSERT INTO dbo.article (nom_article) VALUES ('un article')
INSERT INTO dbo.article (nom_article) VALUES ('un autre article')
GO
INSERT INTO dbo.commande (id_article, quantite_article) VALUES (1, 12)
WAITFOR DELAY '00:00:02'
GO
INSERT INTO dbo.commande (id_article, quantite_article) VALUES (1, 2)
WAITFOR DELAY '00:00:02'
GO
INSERT INTO dbo.commande (id_article, quantite_article) VALUES (1, 26)
WAITFOR DELAY '00:00:02'
GO
INSERT INTO dbo.commande (id_article, quantite_article) VALUES (2, 3)
WAITFOR DELAY '00:00:02'
GO
INSERT INTO dbo.commande (id_article, quantite_article) VALUES (2, 15)
WAITFOR DELAY '00:00:02'
GO
INSERT INTO dbo.commande (id_article, quantite_article) VALUES (2, 60)
WAITFOR DELAY '00:00:02'
GO
--SELECT * FROM dbo.article
--SELECT * FROM dbo.commande
;WITH
CTE_DERNIERES_COMMANDES AS
(
SELECT id_article
, date_commande
FROM
(
SELECT id_article
, date_commande
, ROW_NUMBER() OVER(PARTITION BY id_article ORDER BY date_commande DESC) AS n
FROM dbo.commande
) AS TMP
WHERE n <= 2
)
SELECT A.nom_article
, C.quantite_article
, C.date_commande
FROM dbo.article AS A
INNER JOIN dbo.commande AS C
ON A.id_article = C.id_article
INNER JOIN CTE_DERNIERES_COMMANDES AS CDC
ON CDC.id_article = C.id_article
AND CDC.date_commande = C.date_commande
ORDER BY A.nom_article, C.date_commande |
Partager