2015-10-16 146 views
0

我有一个wo_records表,希望能够以开始时间提取每台机器的当前工作订单。SQL Server 2005子查询

我写此查询排名每个记录,并给出了最新的入门的秩为1,但我无法巢它在那里我可以使用where子句(where rank =1)

SELECT 
    *, 
    RANK() OVER (PARTITION BY get_address ORDER BY t_start desc) AS Last_value 
FROM 
    wo_records 

输出:

ndx|Wo  | t_start     |t_end    | get_address| Rank 
-------------------------------------------------------------------------------- 
45 12521231 2019-01-07 15:41:24.000 NULL     44   1 
46 12521231 2018-01-08 15:42:24.000 2018-01-08 15:47:24.000 44   2 
39 12521231 2016-01-21 15:43:24.000 2016-01-21 15:49:24.000 44   3 

嵌套此语句以仅检索rank = 1的行的正确方法是什么?

谢谢,

回答

1

除非我失去了一些东西,所有你要找的是这样吗?

Select * 
From  
(
    Select *, 
      RANK() over (PARTITION BY get_address order by t_start desc) AS Last_value 
    From wo_records 
) As A 
Where A.Last_value = 1 
+0

是的,“AS A”究竟做了什么? – Jad

+1

它将子查询别名,以便它可以被引用。 – Siyual

+0

我正在尝试使用INTO #temp做同样的事情, – Jad

2

Siyual答案看起来不错。

我只想告诉你关于CTE。这样你就可以有几个派生表,也有别名,易于阅读。

WITH alias1 AS (
    Select *, 
      RANK() over (PARTITION BY get_address order by t_start desc) AS Last_value 
    From wo_records 
), 
anotherAlias AS (
    SELECT * .... 
) 
Select * 
From alias1 A -- optional can also include [anotherAlias] 
Where A.Last_value = 1