sql - LIMIT 运算符和错误:ORA-00933:SQL 命令未正确结束
问题描述
我有包含 ClientID NUMBER (15,0)
、 ProductPrice NUMBER (15,0)
、 ProductQuantity NUMBER (21,0)
、 ProductName VARCHAR2(50)
、 BuyDate列的表DATE
我执行下面的脚本来提取每个客户花费更多钱的 ProductName:
SELECT ClientID, MAX(ProductPrice * ProductQuantity) AS ForProduct
FROM TESTVIEW
WHERE BuyDate BETWEEN TO_DATE('01.01.2020','MM.DD.YYYY') AND TO_DATE('01.05.2020','MM.DD.YYYY')
GROUP BY ClientID
ORDER BY ClientID, ForProduct DESC LIMIT 1
但是,我收到错误 ORA-00933:SQL 命令未正确结束。没有运算符 LIMIT 它可以正常工作。是什么原因,我怎样才能得到我需要的结果?
解决方案
根据您的评论,使用ROW_NUMBER()
:
SELECT t.*
FROM (SELECT ClientID, MAX(ProductPrice * ProductQuantity) AS ForProduct,
ROW_NUMBER() OVER (PARTITION BY ClientId ORDER BY MAX(ProductPrice * ProductQuantity) DESC) as seqnum
FROM TESTVIEW
WHERE BuyDate BETWEEN DATE '2020-01-01' AND DATE '2020-01-05'
GROUP BY ClientID
) t
WHERE seqnum = 1;
推荐阅读
- database - PostgreSQL 是否有内置功能可以每分钟或每小时删除一次旧记录,例如删除所有超过 2 年的记录并每小时检查一次
- javascript - 没有 npm 的 video.js 插件(例如 eme)
- dataweave - DW 差异函数
- mysql - 使用 SOUNDEX MYSQL laravel 搜索
- python - 错误的 IF 语句输出
- javascript - 为什么这个简单的 ping pong socket.io 示例在短时间内失败?(数据有效载荷未定义)
- c++ - C++在父类成员函数中使用子成员变量
- javascript - 从现有应用程序的样式表中排除 Vue 组件
- microsoft-teams - 如果您的邮箱在本地,团队聊天实际上存储在哪里?
- jquery - DataTables 括号-带动态列的负数插件