参数取查询
问题描述:
第一行,我有以下查询:参数取查询
WITH lftno(counterrow) AS (
VALUES(select rownos
from test.table1
where year='2020' and usage='1')
)
UPDATE test.deltable
SET year=concat('31.12.','2012')
WHERE ID IN (
select res.id
from (
select res.id
from (
SELECT ROW_NUMBER() OVER (ORDER BY year ASC) AS delyear
, ID, year
from test.deltable
) res
where year(res.year)='2012'
fetch first integer(counterrow) rows only
)
的与选择的结果是10,所以我想取第一行使用10作为值的行赶上。
最终查询时间更长,但要显示问题,这很容易读取。
我试图
'fetch first ' || integer(counterrow) || ' rows only'
或where子句
AND row_number() over() <= counterrow
的一部分,但也不能工作。
问题是,我不能诉诸于他们的一部分。我只需要对抗者给出的线路。
任何想法?
感谢您的帮助。
答
您不能在WHERE
子句中使用row_number()
。而且,FETCH
子句需要常量。但是,您可以在子查询中使用row_number()
,并在外部查询中使用结果。如果我理解正确的话,你想:
WITH lftno(counterrow) AS (
VALUES(select rownos from test.table1 where year = '2020' and usage = '1')
)
select res.id
from (SELECT ROW_NUMBER() OVER (ORDER BY year ASC) AS delyear,
ID, year
from test.deltable
) res
where year(res.year) = '2012' and
delyear <= counterrow;
+0
我在问题中添加了更多关于查询的信息,所以您可以看到这不是一个选项。 – Thevagabond
+0
@Thevagabond。 。 。没有像'lftno'命令那样的事情。 SQL表,子查询,CTE和结果集都表示*无序*集。只有一个单独的列指定了排序。 –
作为一个侧面说明VALUES子句是联合国有必要,可以更换'值(从test.table1 选择rownos 其中year =“2020”称和用法= '1')''''select'rownos from test.table1 where year ='2020'and usage ='1'' – Lennart