如何在SQL中返回每个组的增量组编号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQL中返回每个组的增量组编号相关的知识,希望对你有一定的参考价值。
我想在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
分区的唯一ROW编号。我真正需要的是,对于每个ts_DateTime
分区,RowFilter列应该看起来像Required result列。
答案
你不应该使用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
另一答案
我想你正在寻找这个:
ROW_NUMBER() OVER (PARTITION BY hl.id ORDER BY hl.ts_DateTime) AS RowFilter
以上是关于如何在SQL中返回每个组的增量组编号的主要内容,如果未能解决你的问题,请参考以下文章
如何在 hive sql 中获取每个组的最大 row_number()