如何在SQL每组返回一个增量组号(How to return a incremental group

2019-07-18 07:05发布

我想在SQL创建的数据查询到递增的行数组,在一个共同的日期时间进行分组,并保持“组号”增加对下一个日期时间等。 这些“组号”不能复位对于每个组我使用分区的语句时,都看到了。 这里是我的样本数据:

ts_DateTime          |ID   |Value|RowFilter|RequiredResult
--------------------------
2013/01/09 09:23:16  |8009 |0    |1        |1
2013/01/09 09:23:16  |8010 |0    |2        |1
2013/01/09 09:23:16  |8026 |0    |3        |1

2013/01/09 09:23:22  |8026 |0    |1        |2

2013/01/09 09:23:28  |8009 |0    |1        |3
2013/01/09 09:23:28  |8010 |0    |2        |3
2013/01/09 09:23:28  |8026 |0    |3        |3

2013/01/09 09:27:03  |8009 |0    |1        |4
2013/01/09 09:27:03  |8010 |0    |2        |4
2013/01/09 09:27:03  |8026 |0    |3        |4

2013/01/09 09:27:09  |8009 |0    |1        |5
2013/01/09 09:27:09  |8010 |0    |2        |5
2013/01/09 09:27:09  |8026 |0    |3        |5

2013/01/09 09:27:15  |8009 |0    |1        |6
2013/01/09 09:27:15  |8010 |0    |2        |6
2013/01/09 09:27:15  |8026 |0    |3        |6


我用得到这些结果的查询是:

select hl.ts_DateTime,  hl.Tagname as [ID],  hl.TagValue as [Value],
ROW_NUMBER() OVER (PARTITION BY hl.ts_datetime ORDER BY hl.tagname) AS RowFilter
from Table1 hl

所以基本上,看的RowFilter列,我得到每唯一的行数ts_DateTime分区。 我真正需要的是,每个ts_DateTime分区的RowFilter列看起来应该像所需的结果列。

Answer 1:

你不应该使用ROW_NUMBER()

  • 使用DENSE_RANK()代替
  • 除去PARTITION BY

查询,

SELECT hl.ts_DateTime,  
       hl.Tagname as [ID],  
       hl.TagValue as [Value],
       DENSE_RANK() OVER (ORDER BY ts_datetime) AS RowFilter
FROM   Table1 hl 
ORDER  BY RowFilter
  • SQLFiddle演示


Answer 2:

我认为你正在寻找这样的:

ROW_NUMBER() OVER (PARTITION BY hl.id ORDER BY hl.ts_DateTime) AS RowFilter


文章来源: How to return a incremental group number per group in SQL