0
A
回答
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;
注:看你还没有真正给有关的是定制任何细节r在同一天订购不同的项目,我假设每个客户在给定日期只订购了一件东西,但如果情况并非如此,那么您必须稍微调整查询逻辑。
相关问题
- 1. SQL查询将下一行的列设置为一行的列,将第二行的列设置为下一行
- 2. 按一列对多列进行排序
- 3. 如何按一列进行分组并对另一列的值进行排序?
- 4. 按列名对数据框的列进行排序日期
- 5. 如何将现有列的第一行填充到第二行的新列中?
- 6. 如何按顺序自动排列行号来上下排列表格行?
- 7. 如何在保留第一列的排序的同时按第二列进行排序?
- 8. SQL:按两列排序并在第二列中获得具有相同值的第一行
- 9. 按行排序二维阵列
- 10. 根据第一列将第二列转换为行
- 11. 查询水平排列行
- 12. 复制矩阵的行或列,并将其插入到下一行/列
- 13. 将运行的日期列表添加到sql查询中
- 14. 对列进行排序并将结果设置为MySql中的另一列
- 15. SQL Server:行按组排序和序列
- 16. 上移/下移行不datagridview的列进行排序后,工作
- 17. 对一列中的第二个值进行排序rich:dataTable
- 18. 获取上一行中列的值并将其添加到下一行的下一列
- 19. 在将一行拷贝到其他列时排除一些列
- 20. 将DataRowView作为打印行排列?
- 21. 自第二行开始按列值排序工作表
- 22. 按日期分组并将行折叠为一个列
- 23. 按两列对列表进行排序
- 24. 如何将第二行的第二列与Bootstrap中的第一列或第一行对齐?
- 25. 排序下拉列表按值排列
- 26. 转换行到列列排在SQL Server
- 27. 如何按频率对Sql列进行排序并选择行
- 28. jquery将表第二列值合并到下一列值
- 29. 对列的第一个字符进行Sql排序
- 30. 用行排序列