我正在编写一个查询,我希望它按序列进行排序。前七条记录应按 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)
第二个键将顺序保留在一个组中。
您不指定应如何为每个组选择行。 从这个问题中不清楚。