0

これを行う方法がわかりません。mod_date が最新の値である一意の名前の行を 1 つだけ選択する必要があります

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

4 に答える 4

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名前の最後の日付が一意でない場合にすべての行が必要な場合は、代わりに使用します。

于 2013-01-31T11:10:26.310 に答える
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
于 2013-01-31T11:13:04.623 に答える
0

個別を使用すると、重複データが省略される可能性がありますが、有用なデータも省略される可能性があるため、競合する可能性もあります。

結果(日付に基づいて)で注文するだけで、日付に基づいて並べ替えることができます。

select * from(tablename)order by [Date] desc

于 2013-01-31T11:22:25.160 に答える
0
Select distinct smtn from Databasename order by mod_date desc
于 2013-01-31T11:11:15.343 に答える