Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server查询应返回最大值记录_Sql Server_Tsql - Fatal编程技术网

Sql server SQL Server查询应返回最大值记录

Sql server SQL Server查询应返回最大值记录,sql-server,tsql,Sql Server,Tsql,我有这样的桌子: id_Seq_No emp_name Current_Property_value ----------------------------------------------- 1 John 100 2 Peter 200 3 Pollard 50 4 John 500 我想要特定员

我有这样的桌子:

id_Seq_No   emp_name     Current_Property_value  
-----------------------------------------------
1           John              100
2           Peter             200
3           Pollard            50
4           John              500
我想要特定员工的最大记录值

例如,John有2条记录,顺序为1、4。我希望在单个查询中没有当前属性值

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

要获取
当前属性值
,只需按
id\u Seq\u No
对结果排序,然后获取第一个:

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

要获取
当前属性值
,只需按
id\u Seq\u No
对结果排序,然后获取第一个:

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

这将为所有受束缚的员工提供最高回报

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)

这将为所有受束缚的员工提供最高回报

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)

您可以将
ROW\u NUMBER
CTE
一起使用

查询

;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;

您可以将
ROW\u NUMBER
CTE
一起使用

查询

;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;

如果想要最大属性值,为什么要在ID上使用
max
?为什么不
max(当前属性值)
?你的意思是最新的而不是最大值吗?@PanagiotisKanavos他想要“最大值”
id\u Seq\u No
与某个
emp\u名称
@msanz匹配的
当前属性值
,这不是问题或标题所说的,尽管可以推断出来。标题和文本应为rewritten@PanagiotisKanavos完全同意你的观点,只是想解释一下如果你想要最大的属性值,为什么要在ID上使用
max
?为什么不
max(当前属性值)
?你的意思是最新的而不是最大值吗?@PanagiotisKanavos他想要“最大值”
id\u Seq\u No
与某个
emp\u名称
@msanz匹配的
当前属性值
,这不是问题或标题所说的,尽管可以推断出来。标题和文本应为rewritten@PanagiotisKanavos完全同意您的意见,只是想说明一下当您使用
行编号时,您不需要TOP/ORDER BY,只需在WHERE子句中对照1检查其值即可。您正在强制执行一个不必要的排序。@PanagiotisKanavos:只需对照1检查它的值。。?你的意思是使用cte并检查rownum=1@PanagiotisKanavos:Top与ties一起使用,在按rownumber排序后仅限制Top/ORDER by元素使用
ROW\u NUMBER
时不需要Top/ORDER by,只需在WHERE子句中对照1检查其值即可。您正在强制执行一个不必要的排序。@PanagiotisKanavos:只需对照1检查它的值。。?你的意思是使用cte并检查rownum=1@PanagiotisKanavos:Top与ties一起使用,在按rownumber排序后仅限制Top 1元素