복붙노트

[SQL] 가장 최근의 기록을 검색하는 SQL 쿼리를 작성

SQL

가장 최근의 기록을 검색하는 SQL 쿼리를 작성

내 프로젝트 팀에 대한 상태 보드 모듈을 만드는 오전. 상태 보드는 사용자가 또는 축소로 자신의 상태를 설정하고, 그들은 또한 메모를 제공 할 수 있습니다. 나는 하나의 테이블에있는 모든 정보를 저장하는 계획이었다 ... 그리고 데이터의 예는 다음과 같다 :

Date               User         Status    Notes
-------------------------------------------------------
1/8/2009 12:00pm   B.Sisko      In        Out to lunch    
1/8/2009 8:00am    B.Sisko      In  
1/7/2009 5:00pm    B.Sisko      In    
1/7/2009 8:00am    B.Sisko      In    
1/7/2009 8:00am    K.Janeway    In   
1/5/2009 8:00am    K.Janeway    In    
1/1/2009 8:00am    J.Picard     Out       Vacation  

나는이 경우, 내 쿼리는 다음과 같은 결과를 반환 데이터를 조회하고 각 사용자에 대한 가장 최근의 상태를 반환하고 싶습니다 :

Date               User         Status    Notes
-------------------------------------------------------  
1/8/2009 12:00pm   B.Sisko      In        Out to lunch    
1/7/2009 8:00am    K.Janeway    In   
1/1/2009 8:00am    J.Picard     Out       Vacation  

나는이 일어날 수 있도록하기 위해 TRANSACT-SQL 알아 내기 위해 노력하고있다? 어떤 도움을 주시면 감사하겠습니다.

해결법

  1. ==============================

    1.하위 쿼리 파생 테이블에서 집계 한 다음에 가입 할 수 있습니다.

    하위 쿼리 파생 테이블에서 집계 한 다음에 가입 할 수 있습니다.

     Select Date, User, Status, Notes 
        from [SOMETABLE]
        inner join 
        (
            Select max(Date) as LatestDate, [User]
            from [SOMETABLE]
            Group by User
        ) SubMax 
        on [SOMETABLE].Date = SubMax.LatestDate
        and [SOMETABLE].User = SubMax.User 
    
  2. ==============================

    2.하위 쿼리를 사용하는 경우 다른 방법이 한 번만 대신 두 배의 테이블을 검색합니다

    하위 쿼리를 사용하는 경우 다른 방법이 한 번만 대신 두 배의 테이블을 검색합니다

    단지 SQL 서버 2005까지

    select Date, User, Status, Notes 
    from (
           select m.*, row_number() over (partition by user order by Date desc) as rn
           from [SOMETABLE] m
         ) m2
    where m2.rn = 1;
    
  3. ==============================

    3.파생 테이블이 작동 것이다, 그러나 이것은 SQL 2005의 경우는, CTE 및 ROW_NUMBER 청소기 수 있습니다 :

    파생 테이블이 작동 것이다, 그러나 이것은 SQL 2005의 경우는, CTE 및 ROW_NUMBER 청소기 수 있습니다 :

    WITH UserStatus (User, Date, Status, Notes, Ord)
    as
    (
    SELECT Date, User, Status, Notes, 
         ROW_NUMBER() OVER (PARTITION BY User ORDER BY Date DESC)
    FROM [SOMETABLE]
    )
    
    SELECT User, Date, Status, Notes from UserStatus where Ord = 1
    

    이것은 또한 각 사용자의 최신 X 상태의 표시를 용이하게한다.

  4. ==============================

    4.또 다른 쉬운 방법 :

    또 다른 쉬운 방법 :

    SELECT Date, User, Status, Notes  
    FROM Test_Most_Recent 
    WHERE Date in ( SELECT MAX(Date) from Test_Most_Recent group by User)
    
  5. from https://stackoverflow.com/questions/1049702/create-a-sql-query-to-retrieve-most-recent-records by cc-by-sa and MIT license