Zoh*_*sef 2 sql sql-server select
为了理解这个问题,我将展示一个例子:表中的Students列是:
stuID, cityID, Name, updateDate
Run Code Online (Sandbox Code Playgroud)
我的SELECT是:
SELECT
ROW_NUMBER() OVER (PARTITION BY cityID ORDER BY updateDate DESC) AS rownumber
stuID,
cityID,
Name
FROM
Students
WHERE
rownumber = 1
Run Code Online (Sandbox Code Playgroud)
无论如何 - 为什么我想进行这样的查询,这只是一个例子,但我如何在rownumber上放入"WHERE"条件????
该WHERE条款将立即进行后评估FROM条款,所以SQL不知道,当你是指someValue中你选择refered
如果要将谓词应用于RowNumber,请使用CTE/SubQuery:
;With cte
as
(
SELECT
ROW_NUMBER() OVER (PARTITION BY cityID ORDER BY updateDate DESC) AS rownumber
stuID,
cityID,
Name
FROM Students
)
select * from cte where rownumber=1
Run Code Online (Sandbox Code Playgroud)
以下是逻辑查询阶段,它们规定了如何在一个阶段中定义的条款可用于下一阶段的条款.
1. FROM
2. ON
3.OUTER
4.WHERE
5.GROUP BY
6.CUBE | ROLLUP
7.HAVING
8. SELECT
9. DISTINCT
10. TOP
11. ORDER BY
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,RowNumber您已经定义了in select子句,它将仅在select之后的下一个阶段可用
下面是每个子句的逻辑查询处理流程图:Itzik Ben-Gan
如果将查询放入子查询或CTE,则可以使用任何别名和计算字段:
select *
from
(
SELECT
ROW_NUMBER() OVER (PARTITION BY cityID ORDER BY updateDate DESC) AS rownumber
stuID,
cityID,
Name
FROM Students
) s
WHERE rownumber = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |