当前位置: 首页 > 面试题库 >

按顺序编号分组

裴展
2023-03-14
问题内容

我有一些这样的数据:

row    id
1      1
2      36
3      37
4      38
5      50
6      51

我想查询它看起来像这样:

 row    id    group
 1      1     1
 2      36    2
 3      37    2
 4      38    2
 5      50    3
 6      51    3

…这样我就可以按数字连续的方式按GROUP BY分组。

另外,循环/游标也是不可能的,因为我正在处理大量数据,谢谢。


问题答案:
create table #temp
(
    IDUnique int Identity(1,1),
    ID int, 
    grp int
)


Insert into #temp(ID) Values(1)
Insert into #temp(ID) Values(36)
Insert into #temp(ID) Values(37)
Insert into #temp(ID) Values(38)
Insert into #temp(ID) Values(50)
Insert into #temp(ID) Values(51)

declare @IDUnique int
declare @PreviousUnique int
declare @ID int
declare @grp int
declare @Previous int
declare @Row int

DECLARE @getAccountID CURSOR SET @getAccountID = CURSOR FOR SELECT Row_Number() Over(Order by IDUnique) Row, IDUnique, ID  From #temp
OPEN @getAccountID
FETCH NEXT FROM @getAccountID INTO @Row, @IDUnique, @ID 
WHILE @@FETCH_STATUS = 0
BEGIN
    IF(@Row = 1)
    Begin
        update #temp set grp = 1 Where IDUnique = @IDUnique
        set @Previous = @ID
        set @grp = 1
    End
    Else If (@Previous + 1 = @ID)
    Begin
        update #temp set grp = @grp Where IDUnique = @IDUnique
        set @Previous = @ID
    End
    Else
    Begin
        set @Previous = @ID
        set @grp = @grp + 1
        update #temp set grp = @grp Where IDUnique = @IDUnique
    End
    FETCH NEXT FROM @getAccountID INTO @Row, @IDUnique, @ID
END
CLOSE @getAccountID
DEALLOCATE @getAccountID

Select * from #temp
Drop Table #temp


 类似资料:
  • 问题内容: 在SQL中,有没有一种方法可以 按键组 顺序添加行号? 假设一个带有任意(CODE,NAME)元组的表。表格示例: 使用CODE作为分组属性的所需投影: 谢谢, 问题答案: SQL服务器 甲骨文 Postgres Sybase公司 MySQL不支持。这涵盖了大多数基地。

  • 问题内容: 我有下表称为问题: 我只想选择每个询问者一次,如果有多个同名提问者,请选择ID最高的一个。因此,预期结果: 我使用以下查询: 我得到以下结果: 因此,它将选择遇到的第一个“鲍勃”,而不是最后一个。 谢谢 问题答案: 如果要为每一个添加最后一个,则应使用聚合函数: 之所以得到不寻常的结果,是因为MySQL使用了一个扩展名,该扩展名允许未选择列表中的项进行汇总,并且不包含在GROUP BY

  • 我有以下称为问题的表: 我想选择每个asker只一次,如果有多个asker具有相同的名称,选择最高的ID之一。所以,预期的结果: 我使用以下查询: 我得到以下结果: 它选择遇到的第一个‘鲍勃',而不是最后一个。

  • 我试着找到联系人的号码 我有以下内容: 或者,如果不可能在每个独立的字段上显示,则至少在“联系人”部分上显示一个不同的编号,如第3个联系人: 联系人的XSD类型如下所示: 包含XSD联系人的我的XSD类型(AdminTharkeholder)如下所示:

  • 问题内容: 对于此表: 我需要将具有相同顺序的组相加,以产生此结果。 如何在SQL Server中做到这一点? 注意:该列中的值是连续的。 问题答案: 根据我在您的问题中添加的标签,这是一个空白和孤岛的问题。 效果最好的解决方案可能是 如果值不能保证如所述连续,那么您将需要使用 而是在CTE定义中。 SQL小提琴