gpt4 book ai didi

sql-server-2005 - 具有复杂条件的 Row_Number

转载 作者:行者123 更新时间:2023-12-04 02:20:25 26 4
gpt4 key购买 nike

是否可以使用 Row_Number()除了使用 Group By 完成的简单分区之外的其他内容上的行编号?

这是我的特殊情况:

Id    Type    Date
-- ---- ----
1 16 Some Date
2 16 Some Date
3 16 Some Date
4 32 Some Date
5 64 Some Date
6 64 Some Date
7 128 Some Date
8 256 Some Date
9 256 Some Date
10 256 Some Date

我想按以下方式对编号进行分区(行编号按日期排序):
Id    Type    RowNb
-- ---- -----
6 64 1
4 32 2
5 64 3
9 256 1
3 16 2
1 16 3
8 256 4
7 128 5
2 16 6
10 256 7

即: 除了 32 和 64 之外的所有其他类型都一起编号 .类型 32 和 64 的编号是可选的,因为我只需要对其他类型进行排序。

我真正想做的是检索 类型为 32 和 64 的所有行,以及其他类型中日期最低的行 .我问这个具体问题的原因是,将来我可能需要检索的不仅仅是第一列,而且我认为如果我可以像这样对我的行进行编号会更容易。如果您有其他解决方案,我会全力以赴。

最佳答案

当然,您可以拥有复杂的分区表达式,就像您可以拥有复杂的分组表达式一样。这是您如何对示例中的行进行排名的一种可能方式:

SELECT
Id,
Type,
ROW_NUMBER() OVER (
PARTITION BY CASE WHEN Type IN (32, 64) THEN 1 ELSE 2 END
Order BY Date
)
FROM atable

但是稍后在过滤要显示的行时,您必须重复该条件。所以,如果我是你,我可能会尝试这样的事情:
WITH marked AS (
SELECT
*,
TypeGroup = CASE WHEN Type IN (32, 64) THEN 1 ELSE 2 END
FROM atable
),
ranked AS (
SELECT
*,
RowNb = ROW_NUMBER() OVER (PARTITION BY TypeGroup ORDER BY Date)
FROM
)
SELECT
Id,
Type,
RowNb
FROM ranked
WHERE TypeGroup = 1 OR RowNb = 1
ORDER BY TypeGroup, RowNb

关于sql-server-2005 - 具有复杂条件的 Row_Number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8055200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com