Sql server 在多个组中排名&多个表更新的高效查询

Sql server 在多个组中排名&多个表更新的高效查询,sql-server,Sql Server,我正在尝试按销售额按月添加排名,并将日期列更改为“月末”字段,该字段仅显示当月的最后一天 我能在不添加更新的情况下连续做两组吗? 我正在寻找每个月的前2名-是否按工作限制和分组? 我觉得这是正确且最有效的查询,但它不起作用-感谢任何帮助 UPDATE table1 SET DATE=EOMONTH(DATE) AS MONTH_END; ALTER TABLE table1 ADD COLUMN RANK INT AF

我正在尝试按销售额按月添加排名,并将日期列更改为“月末”字段,该字段仅显示当月的最后一天

我能在不添加更新的情况下连续做两组吗? 我正在寻找每个月的前2名-是否按工作限制和分组? 我觉得这是正确且最有效的查询,但它不起作用-感谢任何帮助

        UPDATE table1
        SET DATE=EOMONTH(DATE) AS MONTH_END;       
        ALTER TABLE table1
        ADD COLUMN RANK INT AFTER sales;
        UPDATE table1
        SET RANK=
        RANK() OVER(PARTITION BY cust ORDER BY sales DESC);
        LIMIT 2 
原始表格

    +------+----------+-------+--+
    | CUST |   DATE   | SALES |  |
    +------+----------+-------+--+
    |   36 | 3-5-2018 |    50 |  |
    |   37 | 3-15-18  |   100 |  |
    |   38 | 3-25-18  |    65 |  |
    |   37 | 4-5-18   |    95 |  |
    |   39 | 4-21-18  |   500 |  |
    |   40 | 4-45-18  |   199 |  |
    +------+----------+-------+--+
desired output

+------+-----------+-------+------+
| CUST | Month End | SALES | Rank |
+------+-----------+-------+------+
|      |           |       |      |
|   37 | 3-31-18   |   100 |    1 |
|   38 | 3-31-18   |    65 |    2 |
|   39 | 4-30-18   |   500 |    1 |
|   40 | 4-30-18   |   199 |    2 |
+------+-----------+-------+------+

我不知道你为什么要把EOMOUNT作为一个存储值,但是你所拥有的将起作用

我不会使用[rank]作为列名,因为我避免使用SQL中使用的任何词,可能是[sales_rank]或类似的词

ALTER TABLE table1
ADD COLUMN [sales_rank] INT AFTER sales;

with cte as (
    select
          cust
        , DENSE_RANK() OVER(PARTITION BY cust ORDER BY sales DESC) as ranking
    from table1
    )
update cte
set sales_rank = ranking
where ranking < 3
;
顺便说一下,限制2不能在SQL Server中使用,而且它肯定不能用于每个分组。当您使用诸如rank或DENSENCE_rank之类的窗口函数时,您可以使用下一层where子句中这些函数的输出。i、 e.在子查询或cte中使用这些函数,然后使用where子句根据计算值筛选行


还要注意的是,我使用了稠密的秩来保证不跳过秩号,这样后续的where子句将有效。

获取错误?你好像忘了告诉我们那个错误是什么。请不要在你的问题中作为评论。你能指出分号吗?不知道你在说什么。我想知道如何在每个月内展示前2名,这就是为什么我发布了一个问题小组,但是的,它不工作寻找建议销售描述;限制2如果我这样做,那么前两名都是在四月。我每个月都需要前两名——3月和4月——问题的近期副本,这样看起来就像是家庭作业。