从具有相同ID的许多行中选择一行

时间:2013-01-31 11:08:38

标签: sql sql-server select

我无法弄清楚如何做到这一点。 我只需要为唯一名称选择一行,其中mod_date是最新值

mod_date      smtn           name     smtn2

2013-01-31  LV002002310453   Rax      zse
2013-01-29  LV002002310453   Rax      zse         
2013-01-31  LV002002310463   Rendo    xxc           
2013-01-01  LV002002310463   Rendo    xxc          
2013-01-28  LV002002310465   Mag      xsa        
2013-01-30  LV002002310465   Mag      xsa     
2013-01-25  LV002002310465   Mag      xsa 

我的选择结果应如下所示:

 mod_date      smtn          name     smtn2

2013-01-31  LV002002310453   Rax       zse
2013-01-31  LV002002310463   Rendo     xxc       
2013-01-30  LV002002310465   Mag       xsa   

感谢。

4 个答案:

答案 0 :(得分:3)

您可以在CTE中使用ROW_NUMBER(假设> = SQL-SERVER 2005)

WITH x AS (SELECT mod_date,smtn,name,smtn2, 
                RN = Row_number() 
                       OVER( 
                         partition BY name 
                         ORDER BY mod_date DESC) 
         FROM   dbo.tablename) 
SELECT mod_date,smtn,name,smtn2 
FROM   x 
WHERE  rn = 1 

如果您想要名称的最后一个日期的所有行不唯一,请使用DENSE_RANK

答案 1 :(得分:1)

请尝试:

select * From
(
    select 
        Row_number() over (partition by name order by mod_date desc) RNUM, 
        mod_date, 
        name
    From 
        YourTable
)x where RNUM=1

答案 2 :(得分:0)

Select distinct smtn from Databasename order by mod_date desc

答案 3 :(得分:0)

使用distinct可能会省略重复数据,但也可能会发生冲突,因为它也可以省略有用的数据。

您可以按结果(按日期)排序,以便您可以根据日期对其进行排序。

按[日期] desc

从(tablename)顺序中选择*