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