我有一个产品订单表,每个产品都有自己的发货日期。如何检索订单,以显示最快的发货日期?
例如:
Order Product Ship date
1 phone 02/03/2019
1 charger 02/07/2019
2 printer 03/01/2019
检索以下内容的SQL查询是什么?
Order Product Ship date
1 phone 02/03/2019
1 charger 02/03/2019
2 printer 03/01/2019
即订单1上的所有发货日期均为最早日期,均为02/03/2019。
我尝试过:
SELECT order,
product,
(SELECT ship_date FROM Tracking ORDER BY ship_date ASC) tbl ON tbl.order = t.order
FROM Tracking t
但是我得到了错误:
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.
答案 0 :(得分:1)
要摆脱“除非在视图,内联函数,派生表,子查询和公共表表达式中使用ORDER BY子句,除非也指定了TOP或FOR XML,否则该子句无效。”消息,您可以通过在子查询中添加“ SELECT TOP 100 PERCENT”来实现。 但我建议您研究一下RANK和DENSE_RANK函数,因为它们可能会更有帮助
答案 1 :(得分:1)
考虑到错误消息,我认为这是针对SQL Server的,因此可以使用窗口功能。
您可以使用min()
的窗口版本来获取订单的最小发货日期。
SELECT [order],
[product],
min([ship date]) OVER (PARTITION BY [order]) [ship date]
FROM tracking;
答案 2 :(得分:0)
我不确定我是否理解您在这里想要实现的目标。好吧,如果您只想查询按发货日期排序的表,我认为类似的方法会起作用:
SELECT * FROM Tracking ORDER BY ship_date ASC;
答案 3 :(得分:0)
您正在使其变得非常复杂。查询非常简单:
select * from my_table group by shipdate order by shipdate asc