sql - 为每个人选择每个月的前两项
问题描述
我想为每个人获取每个月的前两项。这个想法是如果项目具有相同的日期,它应该返回最大的金额。我很难为它写一个简单的逻辑条件。
这是表格的截图: table datasource
代码应该看起来像这样
SELECT MONTH(date) as month, name, item (WHERE Top 3 MONTH(date))
FROM table
GROUP BY MONTH(date), name, item
预期输出应类似于以下内容: 预期输出
(编辑):对不起,这不适用于 SQL 服务器,我用标签误导了这个问题。我正在使用 phpmyadmin 进行 SQL 查询。很抱歉对于这个误会。
解决方案
使用ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY name, MONTH(date)
ORDER BY date, quantity DESC) rn
FROM yourTable
)
SELECT date, name, item, quantity
FROM cte
WHERE rn <= 2;
推荐阅读
- java - 如何打印数组中所有出现的最大两个整数?
- swift - 带有 UIDatePicker 的计时器倒计时不会第一次触发 datePickerValue 并且在我的 datePicker 小时中也显示为 ho ... 和分钟
- c# - 如何修复“无法将当前 JSON 数组反序列化为“段落”类型,因为需要 JSON 对象(例如 {“name”:“value”})来反序列化
- c++ - 在代码行中输入错误的数学方程式?
- angularjs - 在 chrome 中显示大 base64 pdf 文件
- python - 将第 1 列、第 2 列和第 n 列读取到熊猫数据框的最后一列
- flutter - BLoC - 每个州都应该是一个单独的类别吗?
- ionic-framework - ionic 4 routerOutlet.canGoBack() 在使用 navigateForward 导航时返回 false
- java - 需要帮助以了解此 for 循环的作用及其工作原理
- python - 如何在打印中打印int?