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元素