首页 > 解决方案 > 选择不同的最新行

问题描述

如何选择不重复的最新行?

select distinct FirmaTransportowa.dbo.Kurier.id, FirmaTransportowa.dbo.Zlecenie.adresKoncowy, FirmaTransportowa.dbo.ZlecenieKurier.id
from FirmaTransportowa.dbo.Kurier 
join FirmaTransportowa.dbo.ZlecenieKurier on FirmaTransportowa.dbo.Kurier.id= FirmaTransportowa.dbo.ZlecenieKurier.kurierId
join FirmaTransportowa.dbo.Zlecenie on FirmaTransportowa.dbo.Zlecenie.id= FirmaTransportowa.dbo.ZlecenieKurier.zlecenieId
where FirmaTransportowa.dbo.Kurier.id = FirmaTransportowa.dbo.ZlecenieKurier.kurierId 
order by FirmaTransportowa.dbo.ZlecenieKurier.id desc

这是我上面的结果:

3   Gdynia      6
2   Katowice    5
2   Gdynia      4
2   Gdynia      3
2   Poznań      2
3   Warszawa    1

我想保留上面的前两行,其中第一行被定义为在第 3 列中具有最大值:

3   Gdynia      6
2   Katowice    5

标签: sqlsql-servertsql

解决方案


首先,让我向您介绍表别名 - 看看您的查询是多么容易阅读。

现在您可以使用该功能解决您的问题row_number(),然后只选择行号 1。

with cte as (
  select K.id Col1, Z.adresKoncowy Col2, ZK.id Col3
    , row_number() over (partition by K.id order by ZK.id desc) RowNum
  from FirmaTransportowa.dbo.Kurier K 
  join FirmaTransportowa.dbo.ZlecenieKurier ZK on K.id = ZK.kurierId
  join FirmaTransportowa.dbo.Zlecenie Z on Z.id = ZK.zlecenieId
  where K.id = ZK.kurierId 
  -- order by ZK.id desc
)
select Col1, Col2, Col3
from cte
where RowNum = 1
order by Col1 desc;

注意:一定要使用比我更好的列别名——我不知道你的列代表什么,但你知道。


推荐阅读