2013-01-31 2 views
0

어떻게해야할까요? mod_date에 최신 값입니다 내가동일한 ID를 사용하여 여러 행 중에서 하나를 선택하십시오.

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 

감사합니다.

답변

3

당신은 CTE에 ROW_NUMBER을 사용할 수 있습니다

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 (> = SQL-SERVER 2005 가정). 그것은 또한 유용한 데이터를 생략 할 수 있기 때문에, 별개의 아마 중복 데이터를 생략 할 수 있습니다 사용

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

고마워요. 내 하루를 구했다. – jeger

0
Select distinct smtn from Databasename order by mod_date desc 
1

시도하십시오.

결과를 날짜별로 정렬하여 날짜 기준으로 정렬 할 수 있습니다.

선택 * 일] DESC 그래피 (TABLENAME) 주문

0

을하지만, 충돌도 할 수 있습니다

관련 문제