34,590
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID('TEMPDB.DBO.#Products') IS NOT NULL DROP TABLE #Products
GO
CREATE TABLE #Products([ProductID] INT,[ProductName] VARCHAR(8))
INSERT #Products
SELECT 1,'故事会' UNION ALL
SELECT 2,'青年文摘' UNION ALL
SELECT 3,'英语月刊' UNION ALL
SELECT 4,'新华日报' UNION ALL
SELECT 5,'知音'
--------------开始查询--------------------------
--> 测试数据:#Order
IF OBJECT_ID('TEMPDB.DBO.#Order') IS NOT NULL DROP TABLE #Order
GO
CREATE TABLE #Order([OrderID] INT,[ProductID] INT,[UserName] VARCHAR(4),[BeginDate] DATETIME,[EndDate] DATETIME,[Status] INT)
INSERT #Order
SELECT 1,1,'张三','2012-01-02','2012-05-02',1 UNION ALL
SELECT 2,1,'张三','2012-06-02','2013-12-31',0 UNION ALL
SELECT 3,2,'张三','2012-01-01','2012-05-01',1 UNION ALL
SELECT 4,3,'李四','2012-01-01','2014-01-01',0
--------------开始查询--------------------------
SELECT *
FROM #Products p
LEFT JOIN
(
SELECT o.*
FROM #Order o
INNER JOIN
(
SELECT o.ProductID,
max(BeginDate) AS BeginDate
FROM #Order o
WHERE 1=1
AND o.UserName = '张三'
GROUP BY o.ProductID
)oo
ON oo.ProductID = o.ProductID
AND oo.BeginDate = o.BeginDate
)o
ON o.ProductID = p.ProductID
select *
from Products a
left join [Order] b
on a.ProductID=b.ProductID
and not exists(select 1 from [Order] c where c.ProductID=c.ProductID
and c.OrderID>b.OrderID)
--似乎是对的,在加上姓名过滤
SELECT * FROM #Products p LEFT JOIN #Order AS o
ON p.[ProductID]=o.[ProductID]
WHERE NOT EXISTS (SELECT 1 FROM #Order WHERE [ProductID]=o.[ProductID] AND [BeginDate]>o.[BeginDate])
AND O.ProductName='张三'
select A.*,b.orderid ,b.username,b.begindate,b.enddate,b.status
from PRODUCT as a left join (
select * from order as c
inner join (select productid,MAX(begindate) AS begindate from ORDER where username='张三' group by productid) as d
on c.productid=d.productid and c.begindate=d.begindate)
where c.username='张三'
) as b
on a.productid=b.prodcutid
--> 测试数据:#Products
IF OBJECT_ID('TEMPDB.DBO.#Products') IS NOT NULL DROP TABLE #Products
GO
CREATE TABLE #Products([ProductID] INT,[ProductName] VARCHAR(8))
INSERT #Products
SELECT 1,'故事会' UNION ALL
SELECT 2,'青年文摘' UNION ALL
SELECT 3,'英语月刊' UNION ALL
SELECT 4,'新华日报' UNION ALL
SELECT 5,'知音'
--------------开始查询--------------------------
--> 测试数据:#Order
IF OBJECT_ID('TEMPDB.DBO.#Order') IS NOT NULL DROP TABLE #Order
GO
CREATE TABLE #Order([OrderID] INT,[ProductID] INT,[UserName] VARCHAR(4),[BeginDate] DATETIME,[EndDate] DATETIME,[Status] INT)
INSERT #Order
SELECT 1,1,'张三','2012-01-02','2012-05-02',1 UNION ALL
SELECT 2,1,'张三','2012-06-02','2013-12-31',0 UNION ALL
SELECT 3,2,'张三','2012-01-01','2012-05-01',1 UNION ALL
SELECT 4,3,'李四','2012-01-01','2014-01-01',0
--------------开始查询--------------------------
SELECT * FROM #Products p LEFT JOIN #Order AS o
ON p.[ProductID]=o.[ProductID]
WHERE NOT EXISTS (SELECT 1 FROM #Order WHERE [ProductID]=o.[ProductID] AND [BeginDate]>o.[BeginDate])
----------------结果----------------------------
/*
ProductID ProductName OrderID ProductID UserName BeginDate EndDate Status
1 故事会 2 1 张三 2012-06-02 00:00:00.000 2013-12-31 00:00:00.000 0
2 青年文摘 3 2 张三 2012-01-01 00:00:00.000 2012-05-01 00:00:00.000 1
3 英语月刊 4 3 李四 2012-01-01 00:00:00.000 2014-01-01 00:00:00.000 0
4 新华日报 NULL NULL NULL NULL NULL NULL
5 知音 NULL NULL NULL NULL NULL NULL
*/