2009-10-22 3 views
1

내가 트리거에 의해 채워지는 테이블 delivery_history을 반환고유 항목

id(guid) order_number delivery_number haulier timestamp(getdate()) 

      1    1234    haulier1 2009-10-08 8:34:00 
      2    1235    haulier1 2009-10-09 9:15:00 
      1    1234    haulier2 2009-10-10 9:20:00 

나는 모든 열을 반환하고 싶지만, 난 단지보고 싶어 독특한 최신 타임 스탬프 delivery_number, 그래서 반환 싶어 데이터는 다음과 같습니다

  1    1234    haulier2 2009-10-10 9:20:00 
      2    1235    haulier1 2009-10-09 9:15:00 

지금까지이 사이트에 게시 된 응답의 모든 하나의 가능성과 조합을 시도하고 그들 중 하나는 제공하지 않습니다 나에게 필요한 결과, 그들은 내가 합리적인 것으로 생각하고 내가 사용한 guid 대신 cremental id를 사용하십시오. 트리거로부터 데이터를 얻으려면 몇 주일이 걸리므로 SQL Server 2005 이상이 필요합니다.

내가 여기에 중복의 가능성을 좋아하지 않아, 사전에 SQL 서버에 마크

답변

2

을 2000

감사 실행됩니다. 동일한 delivery_number를 갖는 두 개의 행은 동일한 시간 소인을 가질 수 있습니다. 배송 빈도와 응용 프로그램의 동작을 감안할 때 가능성은 낮지 만 정확성에 의존하지는 않을 것입니다.

버전은 TOP 1 사용하여 타이 브레이커의 임의의 수의 허용 :

select * from delivery_history a 
where id = (
    select top 1 id 
    from delivery_history b 
    where a.delivery_number = b.delivery_number 
    order by b.timestamp desc [, tie breaking col1, col2, ... colN] 
) 
1
SELECT order_number, delivery_number, haulier, timestamp 
    FROM delivery_history dh1 
WHERE timestamp = (SELECT max(dh2.timestamp) 
         FROM delivery_history dh2 
        WHERE dh2.delivery_number = dh1.delivery_number)