2016-08-18 68 views
0

我的表是这样的:SQL Server的查询应该返回最大值记录

id_Seq_No emp_name  Current_Property_value 
----------------------------------------------- 
1   John    100 
2   Peter    200 
3   Pollard   50 
4   John    500 

我想特别是员工的最大记录值。

例如,John有2条记录seq_no 1,4。我希望在单个查询中使用第4个seq_no Current_Property_Value。

Select 
    max(id_Seq_No) 
from 
    t1 
where 
    emp_name = 'John' 
+0

如果你为什么要使用'上ID max'希望的最大属性值?为什么不'max(Current_Property_Value)'?也许你的意思是最新而不是最高? –

+0

@PanagiotisKanavos他想要'Current_Property_value'为“最大”'id_Seq_No'匹配某个'emp_name' – Petaflop

+0

@msanz这不是问题或标题说的,尽管可以推断出这一点。标题和文本应该被重写 –

回答

2

要获得Current_Property_value,只是id_Seq_No结果排序并获得第一个:

SELECT 
    TOP 1 Current_Property_value 
FROM 
    table 
WHERE 
    emp_name = 'John' 
ORDER BY 
    id_Seq_No DESC 
0

这将给最高都绑员工

select top 1 with ties 
id_Seq_No,emp_name,Current_Property_value 
from 
table 
order by 
row_number() over (partition by emp_name order by Current_Property_value desc) 
+0

当你使用'ROW_NUMBER'时,你不需要TOP/ORDER BY,只需在WHERE子句中检查其值为1 。你迫使一种不必要的排序。 –

+0

@PanagiotisKanavos:只需检查其值为1 ..?你的意思是使用cte和检查rownum = 1 – TheGameiswar

+0

@PanagiotisKanavos:Top与tie绑定使用,在按rownumber排序后仅限制前1个元素 – TheGameiswar

0

您可以使用ROW_NUMBERCTE

查询

;WITH CTE AS(
    SELECT rn = ROW_NUMBER() OVER(
     PARTITION BY emp_name 
     ORDER BY id_Seq_No DESC 
    ), * 
    FROM your_table_name 
    WHERE emp_name = 'John' 
) 
SELECT * FROM CTE 
WHERE rn = 1;