【问题标题】:how to generate a sequence based on the value of a column如何根据列的值生成序列
【发布时间】:2016-06-16 13:04:11
【问题描述】:

我有一个表格,其中包含网站访问者发送的消息。如果访问者发送了多条消息,我希望能够对这些消息进行分组。 “对这些消息进行分组”是指显示在网页上分组的消息,而不是按照关系逻辑进行分组。 我想要这样的东西:

s   email           messageid     
1 user1@mail.com     1     
1 user1@mail.com     3    
1 user1@mail.com     143    
2 user2@mail.com     343   
2 user2@mail.com      3   
3 user3@mail.com      3

如您所见,如果电子邮件相同,“s”列的编号相同。

我试过了:

select ROW_NUMBER()  over(partition by m.email order by   m.email ) as s

我明白了:

s   email           messageid     
1 user1@mail.com     1     
2 user1@mail.com     3    
3 user1@mail.com     143    
1 user2@mail.com     343   
2 user2@mail.com      3   
1 user3@mail.com      3

计算每封电子邮件的序列。

【问题讨论】:

  • ... ORDER BY [s]?

标签: sql-server database tsql relational-database


【解决方案1】:

我假设s 是新专栏?可以使用DENSE_RANK()窗口函数:

SELECT DENSE_RANK() OVER(ORDER BY t.email) as [s],
       t.email,t.messageid
FROM YourTable t

【讨论】:

  • 对我来说太快了。但是,如果你想要连续的数字,它应该是DENSE_RANK
  • @Diego Alves 将答案标记为已接受是对帮助您的最大感谢。所以点击勾号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多