当前位置: 首页 > 知识库问答 >
问题:

如何在SQL中为每个组返回增量组号

瞿兴朝
2023-03-14

我想在SQL中创建一个数据查询,以递增的方式对行组进行编号,按公共日期时间分组,并在下一个日期时间保持“组编号”递增,以此类推。正如我在使用partition by语句时所看到的那样,不能为每个组重置这些“组号”。以下是我的示例数据

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列,我得到了每个分区的唯一行号。我实际需要的是,对于每个分区,RowFilter列应该看起来像所需的结果列。

共有3个答案

仲孙默
2023-03-14

这是我的回答Chris Ballance先生:

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,
   DENSE_RANK() OVER (PARTITION BY hl.ts_datetime ORDER BY hl.Tagname) AS RequiredResult
from Table1 h1

--试试这个它对我有用...

怀洛华
2023-03-14

我想你正在寻找这个:

ROW_NUMBER() OVER (PARTITION BY hl.id ORDER BY hl.ts_DateTime) AS RowFilter
从劲
2023-03-14

您不应该使用,

  • 改为使用稠密等级
  • 按删除分区

查询

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演示
 类似资料:
  • 问题内容: 假设我有一个返回sth的查询。像这样: 是否可以添加另一列来枚举每个组中的行(即,枚举具有其他角色的经理,工人和人员,而不考虑其他角色)?像这样: 使用Oracle扩展很好。 问题答案: 使用窗口功能:

  • 根据给定的函数对数组的元素进行分组,并返回每个分组中元素的数量。 使用 Array.map() 将数组的值映射到函数或属性名称。 使用 Array.reduce() 创建一个对象,其中的键是从映射的结果中产生的。 const countBy = (arr, fn) => arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce

  • 问题内容: 我有一张桌子,如下所示: 这是样本 的汇总功能仅允许我获得每个方面的最高分。我想查询以获得每个人的最高2分,我该怎么办? 我的预期输出是 问题答案: SQLFiddle演示

  • 我还在学习如何使用XSL对每个组进行分组?(按国家)我正在尝试使用XSL将此XML转换为另一个XML。

  • 我有以下练习: 编写一个名为createListOfObjects的函数,该函数接受 包含名字和姓氏以及返回值的字符串数组 一个对象数组,每个对象都具有属性 和以及名字和姓氏值 对应值* var namesList=['Cameron Betts','Shana Lopez','Angela li']* createListOfObjects(名称列表) = 到目前为止,我的解决方案是: 但它返回

  • 我的问题是: 以下是我的结果集: 我最终要寻找的是一种通过“DEName”递增地对ColumnNumber数据字段进行编号的方法。换句话说,对于每个DEName的每个ColumnName,我希望ColumnNumber从1开始,然后转到每个DEName有多少个唯一的ColumnName。有什么想法吗?