SQL Server 按序列序列查询顺序



我正在编写一个查询,我希望它按序列进行排序。前七条记录应按 1、2、3、4、5、6 和 7 排序。然后它应该重新开始。

我试过分区,last_value但我无法弄清楚。

这是 SQL 代码:

set language swedish;
select 
tblridgruppevent.id, 
datepart(dw,date) as daynumber, 
tblRidgrupper.name
from 
tblRidgruppEvent 
join 
tblRidgrupper on tblRidgrupper.id = tblRidgruppEvent.ridgruppid
where 
ridgruppid in (select id from tblRidgrupper 
where corporationID = 309 and Removeddate is null)
and tblridgruppevent.terminID  = (select id from tblTermin 
where corporationID = 309 and removedDate is null and isActive = 1) 
and tblridgrupper.removeddate is null 
order by  
datepart(dw, date) 

这是结果的一个例子:

5887    1   J2
5916    1   J5
6555    2   Junior nybörjare
6004    2   Morgonridning 
5911    3   J2
6467    3   J5

这就是我所期望的:

5887    1   J2
6555    2   Junior nybörjare
5911    3   J2
5916    1   J5
6004    2   Morgonridning
6467    3   J5

通过进一步缩小并考虑您要做什么以及如何做,您可能会获得一些价值。SQL 在逐行处理以及行从前行借用详细信息的操作中往往表现得非常差。如果您需要更改重复的范围(从 7 切换到 10 或 4 等(,您也可能会遇到问题。

如果你仍然需要任意的数字,你可以将ROW_NUMBER与模数相结合以获得重复增量,然后将其添加到您的选择/位置标准中。它看起来像这样:

((ROW_NUMBER() OVER(ORDER BY column ASC) -1) % 7) + 1 AS Number

外部 +1 将结果显示为 1-7 而不是 0-6,内部 -1 处理一个问题的关闭(从 2 而不是 1 开始的列(。我觉得有更好的方法来解决这个问题,但目前还没有来找我。

编辑:再次查看您的帖子,看起来您正在处理一周中的几天。您可以按日期排序,即使它未显示在 select 语句中,这可能是您使其正常工作所需的全部内容。

前七条记录应按 1、2、3、4、5、6 和 7 排序。然后它应该重新开始。

您可以使用row_number()

order by row_number() over (partition by DATEPART(dw, date) order by tblridgruppevent.id),
datepart(dw, date)

第二个键将顺序保留在一个组中。

您不指定应如何为每个组选择行。 从这个问题中不清楚。

相关内容

  • 没有找到相关文章

最新更新