提问人:Gleb27 提问时间:11/9/2023 更新时间:11/9/2023 访问量:23
对相邻行进行 SQL 比较,对表内的递减序列进行排序
SQL comparison of adjacent rows and sorting of decreasing sequences inside the table
问:
我在SSMS 18,tsql查询中工作
任务: 给定一个正整数。有必要将所有降序序列 按升序排列的相邻数字。输出 结果发送到系统消息区域。
必须使用表格方法执行任务,即将数字写入表中。将数字写入表的有效代码:
declare @table table (digit int, num int)
declare @x1 int = 210030331 --12003313
declare @i int = 1
while @x1 > 0
begin
insert into @table values (@x1%10, @i)
set @i+=1
set @x1/=10
end
将数字写入表时,只允许将数字的数字写入表中,并指定每行的 id。 之后,只需使用 select 收集一个新号码并输出即可。 序列应该如何展开: 有许多210030331 它有递减序列 210 0 30 3 31。在我们把它们翻过来(用递增的序列代替它们)之后,应该得到12003313的数量。
你试过什么:使用 LAG、LEAD 窗口函数比较数字来比较之前和后面的值。尝试使用 ROW_NUMBER 和 RANK 嵌入代码。使用 join 与自己进行比较。我不会尝试应用代码,以免混淆。
它不起作用:充分比较序列中的数字并为序列组提供数字(如下所示)
解决方案的本质是这样的:
通过按 id 比较字符串来识别递减序列。
每个序列的编号(我们给组编号):1 1 3 1 3 2 0 3 3 3 0 4 0 5 1 5 2 5
然后按降序 (desc) 按组编号排序,按升序 (asc) 按数字的数字排序。
请告诉我该怎么做
答: 暂无答案
评论