答案 0 :(得分:0)
在较新版本的SQL Server中,您可以使用LEAD()
窗口功能,但在2012年之前,我认为最简单的方法是使用外部适用:
DECLARE @T TABLE (Customer CHAR(1), [Date] DATE, Item VARCHAR(10));
INSERT @T VALUES
('A', '2016-01-01', 'Pen A'),
('A', '2016-01-05', 'Pen B'),
('A', '2016-01-06', 'Pen C'),
('A', '2016-01-07', 'Pen D'),
('B', '2016-01-01', 'Pen A'),
('B', '2016-01-05', 'Pen B'),
('B', '2016-01-06', 'Pen C'),
('B', '2016-01-07', 'Pen IS');
SELECT T.Customer,
T.FirstOrderedDate,
T.FirstOrderedItem,
T.SecondOrderedDate,
T.SecondOrderedItem,
ThirdOrderedDate = T3.[Date],
ThirdOrderedItem = T3.Item
FROM
(
SELECT T1.Customer,
FirstOrderedDate = T1.[Date],
FirstOrderedItem = T1.Item,
SecondOrderedDate = T2.[Date],
SecondOrderedItem = T2.Item
FROM @T AS T1
OUTER APPLY
(
SELECT TOP 1 T2.Customer, T2.[Date], T2.Item
FROM @T AS T2
WHERE T2.Customer = T1.Customer
AND T2.[Date] > T1.[Date]
ORDER BY T2.[Date]
) AS T2
) AS T
OUTER APPLY
(
SELECT TOP 1 T3.Customer, T3.[Date], T3.Item
FROM @T AS T3
WHERE T3.Customer = T.Customer
AND T3.[Date] > T.SecondOrderedDate
ORDER BY T3.[Date]
) AS T3;
注意:由于您没有真正说明客户在同一天订购不同商品的任何细节,我只是假设每个客户在指定日期只订购了一件商品,但如果不是这样的话,那么你必须稍微调整查询逻辑。