从表中筛选选定的数据
我试图只返回所需的数据,但无法弄清楚只能得到请求的数据的方法。我遇到的问题是表格可能有多个相同的记录,但一列用不同的数据更新。从表中筛选选定的数据
我想要做的是获取最新的入口返回代码以及名称,产品和记录的名称和产品计数。
同桌:
ID | name | product | ordernum| return code
1 john abc 14423 0
2 john abc 14423 1
3 peter ade 13324 1432
4 peter abed 43554 1324
所以返回的信息应该是这个样子。
id | name | product | ordernum | return code | count
2 john abc 14423 1 2
4 peter abed 43554 1324 2
有关我如何做到这一点的任何想法?
您可以使用ROW_NUMBER()
窗函数来获得结果:
;With Cte As
(
Select Id, Name, Product, OrderNum, [Return Code],
Row_Number() Over (Partition By Name, Product Order By Id Desc) As RN,
Count(*) Over (Partition By Name, Product) As Count
From YourTable
)
Select Id, Name, Product, OrderNum, [Return Code], Count
From Cte
Where RN = 1
这只会返回一个产品名称。我想要做的是名称mach名称和产品名称是标识符。所以如果该行具有相同的名称但产品编号不同,它也会返回两行。所以像1 john abc 2323 1222和2 john xyz 2433 2222会在结果上显示 – CrazyITWannaBe
@CrazyITWannaBe如果是这样的话,为什么在预期的结果集中不是'peter'' abe'?或者我误解了你的预期结果? – Siyual
因为我是一个白痴,并匆忙把这个在...对不起 – CrazyITWannaBe
您可以使用窗口函数:
select t.*
from (select t.*,
row_number() over (partition by name order by id desc) as seqnum,
count(*) over (partition by name) as cnt
from t
) t
where seqnum = 1;
注:这将返回4的ID为彼得;我认为“2”是一个错字。
为什么''Id' 1'和'2'的结果集? – Siyual
什么定义:最新?我假设返回代码可能是LOWER,但仍然是“最新” – xQbert
@ siyual,这是我的错误纠正了ID的 – CrazyITWannaBe