sql - 查询自第一个记录订单日期起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))))
但它给出了以下错误:
不能从表中导出。
有人可以帮忙指出我的错误吗?
解决方案
在您的代码中,您使用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
.
推荐阅读
- python - 如何有条件地将一个热向量添加到 Pandas DataFrame
- ios - Swift pushViewController() 不工作但 present() 是
- udp - 使用 tcpdump 检查内部基因包
- drupal - field_instance.yml 文件中缺少捆绑实体、实体类型paragraphs_type
- r - 基于 R 中字符串的部分内容使用 ifelse() 的新列
- sql - 计算平均值 (AVG),包括 Redshift DB 中某个日期范围内的缺失数据
- python - 在 Windows 10 中读取路径以将数据库从 postgres 复制到 csv 时出错
- regex - 除了遵循正则表达式模式的部分之外,如何从字符串中替换所有内容?
- flutter - 颤动文本宽度和高度匹配父级
- arrays - 如何让我的测试将非多维数组传递给我的 React 测试?