首页 > 解决方案 > 查询自第一个记录订单日期起10年内最大订单

问题描述

我应该从第一个记录的订单日期起 10 年内检索最大订单。我尝试了以下查询:

SELECT C.NAME, O.PRICE FROM CUSTOMERS C
    LEFT JOIN ORDERS O ON C.ORDER_ID = O.ID
    WHERE O.PRICE = (SELECT MAX(PRICE) FROM (SELECT * FROM ORDERS O2 WHERE O2.ORDER_DATE BETWEEN MIN(O2.ORDER_DATE) AND DATEADD(year, 10, MIN(O2.ORDER_DATE))))

但它给出了以下错误:

不能从表中导出。

有人可以帮忙指出我的错误吗?

标签: sqlsql-server

解决方案


在您的代码中,您使用MIN(O2.ORDER_DATE)它而不从查询中派生它。
也没有必要,BETWEEN因为您只需要订单日期在最短日期 + 10 年之前。
您可以通过对查询结果进行降序排序并仅保留第一行来获得最高价格:

SELECT TOP 1 C.NAME, O.PRICE 
FROM CUSTOMERS C INNER JOIN ORDERS O 
ON C.ORDER_ID = O.ID
WHERE O.ORDER_DATE <= DATEADD(year, 10, (SELECT MIN(ORDER_DATE) FROM ORDERS))
ORDER BY O.PRICE DESC

我假设您使用 SQL Server,这就是我使用TOP 1.


推荐阅读