我有一个select语句,对于其中一个返回值,我使用了一个计算。
我想要做的是在where子句中使用计算结果。像这样:
SELECT
ROW_NUMBER()OVER(PARTITION BY val1 ORDER BY val2) AS rnum,
val3,
FROM TestDb
Where (rnum = 1)
但它不喜欢rnum
中的where
。
我正在考虑创建一个表并添加到该表中。然后我就可以select where rnum ...
但这看起来并不优雅。还有更好的方法吗?
答案 0 :(得分:2)
您需要使用派生表(子查询/ cte):
WITH cte AS
(
SELECT ROW_NUMBER()OVER(PARTITION BY val1 ORDER BY val2) AS rnum,
val3
FROM TestDb
)
SELECT *
FROM cte
WHERE rnum = 1;
如果您想知道为什么不能直接使用它,请阅读SQL Condition on Window function
答案 1 :(得分:1)
尝试:
Select * from (
SELECT
ROW_NUMBER()OVER(PARTITION BY val1 ORDER BY val2) AS rnum, val3
FROM TestDb )TestDb
Where (rnum = 1)