首页 > 解决方案 > 为每个人选择每个月的前两项

问题描述

我想为每个人获取每个月的前两项。这个想法是如果项目具有相同的日期,它应该返回最大的金额。我很难为它写一个简单的逻辑条件。

这是表格的截图: 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 查询。很抱歉对于这个误会。

标签: sqlgroup-bygreatest-n-per-group

解决方案


使用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;

推荐阅读