- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的数据:
| col1 | col2 | denserank | whatiwant |
|------|------|-----------|-----------|
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 1 |
| 3 | 2 | 2 | 2 |
| 4 | 2 | 2 | 2 |
| 5 | 1 | 1 | 3 |
| 6 | 2 | 2 | 4 |
| 7 | 2 | 2 | 4 |
| 8 | 3 | 3 | 5 |
这是我到目前为止的查询:
SELECT col1, col2, DENSE_RANK() OVER (ORDER BY COL2) AS [denserank]
FROM [table1]
ORDER BY [col1] asc
我想要实现的是,每当 col2 的值发生变化时(即使该值本身被重用),我的密集排名列就会递增。我实际上无法按密集排序的列进行排序,所以这是行不通的)。有关示例,请参阅 whatiwant
列。
有没有办法用DENSE_RANK()
来实现这一点?或者有其他选择吗?
最佳答案
我会用这样的递归 cte 来做到这一点:
declare @Dept table (col1 integer, col2 integer)
insert into @Dept values(1, 1),(2, 1),(3, 2),(4, 2),(5, 1),(6, 2),(7, 2),(8, 3)
;with a as (
select col1, col2,
ROW_NUMBER() over (order by col1) as rn
from @Dept),
s as
(select col1, col2, rn, 1 as dr from a where rn=1
union all
select a.col1, a.col2, a.rn, case when a.col2=s.col2 then s.dr else s.dr+1 end as dr
from a inner join s on a.rn=s.rn+1)
col1, col2, dr from s
result:
col1 col2 dr
----------- ----------- -----------
1 1 1
2 1 1
3 2 2
4 2 2
5 1 3
6 2 4
7 2 4
8 3 5
仅当您的 col1 值不连续时才需要 ROW_NUMBER。如果是,您可以立即使用递归 cte
关于sql - DENSE_RANK() 无重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41949621/
嗨,我有一个数据表,我想根据排序的日期顺序输出从第一组名称开始的名称的密集等级。例如 DROP TABLE MyTable SELECT * INTO MyTable FROM ( VALUES
这是我的数据: | col1 | col2 | denserank | whatiwant | |------|------|-----------|-----------| | 1 | 1
我正在查询网络流量模式以确定哪些访问是初始访问,哪些是返回。 我有两个表 SESSION 和 ALIAS。 CREATE TABLE alias ( person_id vachar(24),
我有三个表,分别名为 Groups、GroupMembers 和 DailyTable。以下是我为他们每个人建立的模型: 模型.py class Group(models.Model): na
我正在尝试使用同一表中的 DENSE_RANK() 更新字段排名,同时尝试执行以下查询获取“操作数应包含 1 列”,请帮助解决此问题 UPDATE scoretable SET rank= (SELE
我在 LINQPad 中尝试了以下操作: create table users ( id int not null, startdate datetime not null,
我有一个查询,它没有返回正确的结果,我希望我的查询返回相同 user_id 的总分,这样每个 user_id 将只有一个记录及其所有分数的总和。 我的查询是这样的: SELECT DENSE_
我有下表 Id,Cat1,Cat2,ColA,ColB, 1,1,1,, 2,1,1,, 3,1,2,, 4,1,3,, 5,2,11,, 6,2,12,, 7,2,12,, 我需要为 Cat2 的每
Dense_Rank 正在考虑一切。有没有办法排除空值,这样 1 之后的下一个排名将是 2 而不是 3。 这就是表格现在的样子: A | DENSE_R -------------- 1
我有一个客户数据表,其中选定的列如下所示: Row_ID Client_ID Status_ID From_date To_date 1 123456
我有一个这样的表: Name | Time | Sam | 10:58 | Sam | 10:59 | Sam | 1
我有一个这样的消费者表。 consumer | product | quantity -------- | ------- | -------- a | x | 3 a
1.ROW_NUMBER() 定义:ROW_NUMBER()函数作用就是将select查询到的数据进行排序,每一条数据加一个序号,他不能用做于学生成绩的排名,一般多用于分页查询, 比如
1、使用rownum为记录排名: 在前面一篇《Oracle开发之分析函数简介Over》,我们认识了分析函数的基本应用,现在我们再来考虑下面几个问题: ①对所有客户按订单总额进行排名 ②按区域和
我在 Oracle 数据库中有一个表 abcd +-------------+----------+ | abcd.speed | abcd.ab | +-------------+-
我的查询是这样的: select name, color, min(age) keep (dense_rank first order by priority asc) as age fr
我的情况是我有一个非常小的 PostgresSQL 数据库(大约 10 个表,其中最大的有几千行),我想以单用户方式使用它应用程序,因此不得不安装整个服务器感觉不必要的繁重。所以,我想,好吧,SQLi
我从这个 MySQL 查询开始,它运行良好: select h.id, h.name, count(distinct c.sales_id) from customers h join sales c
我有一个包含客户购买记录的表,我需要指定购买是在特定日期时间窗口内进行的,一个窗口是 8 天,所以如果我今天购买并且每 5 天购买一次,则意味着我的购买如果窗口号1,但如果我在今天的第一天和 8 天内
我不确定我的语法哪里错了。我需要根据 invoice_total 显示顶级供应商 select * from ( select vendor_id, invoice_total,
我是一名优秀的程序员,十分优秀!