有没有一种不用使用
我有一个带有多个可排序列和可配置行的表格。在我的情况下,排序是可变的,这就是为什么我不能使用 ROWNUM 进行排序的原因。
OVER
的方式在 SQL 中使用 ROW_NUMBER()
,因为我想要使用排序。我有一个带有多个可排序列和可配置行的表格。在我的情况下,排序是可变的,这就是为什么我不能使用 ROWNUM 进行排序的原因。
OVER
的方式在 SQL 中使用 ROW_NUMBER()
,因为我想要使用排序。select ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) as number from Task order by RuleId
select
a.City,
a.len
from
(
select city,length(city) AS len,
row_number()over(order by length(city) desc, city) as hi,
row_number()over(order by length(city), city) as lo
from
STATION) as a where (a.lo=1 or a.hi=1);
我使用了不同的逻辑。我没有检查每一天并验证它是工作日还是假日,而是创建了一个仅列出工作日的表格,然后取第n个值。
CREATE OR REPLACE FUNCTION add_n_working_days (
start_date DATE, working_days PLS_INTEGER
) RETURN DATE AS
l_end_date DATE := start_date;
l_counter pls_integer := 0;
BEGIN
SELECT
business_day
INTO l_end_date
FROM
(
WITH
dates AS
(SELECT start_date + level - 1 as dt FROM dual CONNECT BY level < 100)
,weekdates AS
(SELECT dt as weekday FROM dates WHERE TO_CHAR(dt,'fmdy') NOT IN ('sat','sun'))
,business_days AS
(
SELECT weekday as business_day FROM weekdates
MINUS
SELECT holiday FROM so_holidays
)
SELECT business_day, ROW_NUMBER() OVER (ORDER BY 1) as rn from business_days
)
WHERE rn = working_days + 1;
RETURN l_end_date;
END add_n_working_days;
ROW_NUMBER
。也许您可以解释一下它如何应用于这个问题。我甚至认为在MSSQL中,在OVER
中使用ORDER BY 1
是不起作用的。在来这里之前,我就尝试过了 ;) - Michael Z.
ROW_NUMBER
呢?它如何适用于此?提供一个示例可能会使事情更清晰。 - Martin SmithROW_NUMBER
来返回第 51-100 条记录?如果没有定义顺序,你如何期望 SQL Server 知道你想要的顺序呢? - Martin Smith