Sql 选择最新的行

Sql 选择最新的行,sql,sql-server,tsql,Sql,Sql Server,Tsql,如何选择未复制的最新行 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.Ku

如何选择未复制的最新行

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
这应该有效:)

选择FirmaTransportowa.dbo.Kurier.id,FirmaTransportowa.dbo.Zlecenie.adreskoncwy,max(FirmaTransportowa.dbo.ZlecenieKurier.id)从FirmaTransportowa.dbo.Kurier加入FirmaTransportowa.dbo.ZlecenieKurier on FirmaTransportowa.dbo.Kurier.id=FirmaTransportowa.dbo.ZlecenieKurier.kurierId加入FirmaTransportowa.dbo.Zlecenie.id=FirmaTransportowa.dbo.ZlecenieKurier.zlecenieId其中FirmaTransportowa.dbo.Kurier.id=FirmaTransportowa.dbo.ZlecenieKurier.kurierId
由FirmaTransportowa.dbo.Kurier.id、FirmaTransportowa.dbo.Zlecenie.adreskoncwy组成的组
由FirmaTransportowa.dbo.ZlecenieKurier.id订购

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

现在,您可以使用
row\u 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;

注意:请使用比我更好的列别名-我不知道您的列代表什么,但您知道。

我想从第一列(FirmaTransportowa.dbo.Kurier.id)中选择最新的距离。我想保留前两行:尝试将您的查询与此处找到的内容相结合,@DaleK是的,这是我的定义。我想得到“第一”两行,最大值在第三列:)哇!真是一团糟!请查看“代码格式”选项。抱歉,代码太乱了。您正在寻找FirmaTransportowa.dbo.ZlecenieKurier.id和FirmaTransportowa.dbo.Zlecenie.adreskocwy中最大的FirmaTransportowa.dbo.Kurier.id吗?感谢您的回复,但我发现以下错误:“FirmaTransportowa.dbo.ZlecenieKurier.id”列在ORDER BY子句中无效,因为它不包含在聚合函数或GROUP BY子句中。您可以删除它。你不再需要它了,用max()函数替换它:)@Ivan为了得到一个好的答案,请提供一些关于你正在做什么的解释,而不仅仅是一个(混乱的)代码转储。这样OP就学会了如何自己做。是的,这是一个更简单的查询。但我有以下错误:Msg 207,级别16,状态1,第11行无效列名“RowNum”。Msg 207,16级,状态1,第10行无效列名“Col1”。Msg 207,16级,状态1,第10行无效列名“Col2”。Msg 207,16级,状态1,第10行无效列名“Col3”。@Kipero抱歉错过了中的
-请参见编辑。哇,这个:)我已经得到了几乎完美的结果。我有两行,但最小值是第三列。我如何才能最大限度地解决它?@Kipero检查文档中的行数函数,自学它的工作原理,然后修改它以获得正确的行。最好在这个阶段开始自学:)