sql-server - 分区上的 row_number

标签 sql-server t-sql

似乎无法获得正确的行号,当模板相同时我可以让它计数,但如果模板更改则无法继续计数

create table #temp
(
question varchar(max)
,rvdt datetime
,name varchar(20)
,cdt datetime
,template varchar(max)
)

insert into #temp
(question ,rvdt ,name ,cdt ,template)
values
('question 1', '11/11/2014 10:56:27 PM', 'Joe', '10/11/2014 11:56:27 PM', 'Tempalte 1'),
('question 2', '11/11/2014 10:56:27 PM', 'Joe', '10/11/2014 11:56:27 PM', 'Tempalte 1'),
('question 3', '11/11/2014 10:56:27 PM', 'Joe', '10/11/2014 11:56:27 PM', 'Tempalte 1'),
('question 11', '11/12/2014 10:56:27 PM', 'Joe', '10/12/2014 11:56:27 PM', 'Tempalte 2'),
('question 22', '11/12/2014 10:56:27 PM', 'Joe', '10/12/2014 11:56:27 PM', 'Tempalte 2'),
('question 32', '11/12/2014 10:56:27 PM', 'Joe', '10/12/2014 11:56:27 PM', 'Tempalte 2'),
('question 1', '11/13/2014 10:56:27 PM', 'Joe', '10/13/2014 11:56:27 PM', 'Tempalte 1'),
('question 2', '11/13/2014 10:56:27 PM', 'Joe', '10/13/2014 11:56:27 PM', 'Tempalte 1'),
('question 3', '11/13/2014 10:56:27 PM', 'Joe', '10/13/2014 11:56:27 PM', 'Tempalte 1'),
('question 11', '11/14/2014 10:56:27 PM', 'Mike', '10/14/2014 11:56:27 PM', 'Tempalte 2'),
('question 22', '11/14/2014 10:56:27 PM', 'Mike', '10/14/2014 11:56:27 PM', 'Tempalte 2'),
('question 33', '11/14/2014 10:56:27 PM', 'Mike', '10/14/2014 11:56:27 PM', 'Tempalte 2')

Select 
ROW_NUMBER() over (partition by name, rvdt order by rvdt )'rv#'
,rvdt
,cdt
,name
,template   
from 
#temp
order by rvdt
drop table #temp

我尝试了与partitin中的内容不同的组合,但我似乎无法得到正确的组合

enter image description here

最佳答案

使用Dense_Rank() 排名函数

SELECT Dense_rank()OVER (partition BY name ORDER BY cdt) Rn,
       rvdt,
       cdt,
       name,
       template
FROM   #temp 

输出:

Rn  rvdt                    cdt                     name    template
--  ----------------------- ----------------------- ----    ----------
1   2014-11-11 22:56:27.000 2014-10-11 23:56:27.000 Joe     Tempalte 1
1   2014-11-11 22:56:27.000 2014-10-11 23:56:27.000 Joe     Tempalte 1
1   2014-11-11 22:56:27.000 2014-10-11 23:56:27.000 Joe     Tempalte 1
2   2014-11-12 22:56:27.000 2014-10-12 23:56:27.000 Joe     Tempalte 2
2   2014-11-12 22:56:27.000 2014-10-12 23:56:27.000 Joe     Tempalte 2
2   2014-11-12 22:56:27.000 2014-10-12 23:56:27.000 Joe     Tempalte 2
3   2014-11-13 22:56:27.000 2014-10-13 23:56:27.000 Joe     Tempalte 1
3   2014-11-13 22:56:27.000 2014-10-13 23:56:27.000 Joe     Tempalte 1
3   2014-11-13 22:56:27.000 2014-10-13 23:56:27.000 Joe     Tempalte 1
1   2014-11-14 22:56:27.000 2014-10-14 23:56:27.000 Mike    Tempalte 2
1   2014-11-14 22:56:27.000 2014-10-14 23:56:27.000 Mike    Tempalte 2
1   2014-11-14 22:56:27.000 2014-10-14 23:56:27.000 Mike    Tempalte 2

关于sql-server - 分区上的 row_number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27067617/

相关文章:

java - 结果集为空,虽然 sql 查询没问题

sql - 当datediff大于同一表中的其他列时,更新列

sql-server - 以编程方式生成用户定义数据类型 (UDDT) 的 DDL 语句

sql - 编写 T-SQL 时使用 WHERE + AND + CASE + IN

sql - 如何将ms-access中的sgn()函数转换为t-sql

sql-server - 从列中的 Xml 中提取值

sql-server - 这个表达式怎么能达到NULL表达式呢?

c# - 不能向表中添加一个以上的用户。标识插入设置为关闭

sql-server - 带有错误消息的 SQL Server 触发器

sql - 从 sql 查询中排除所有结果的有效方法是什么?