code

가장 최근 레코드를 검색하는 SQL 쿼리 만들기

codestyles 2020. 12. 27. 10:52
반응형

가장 최근 레코드를 검색하는 SQL 쿼리 만들기


프로젝트 팀을위한 상태 게시판 모듈을 만들고 있습니다. 상태 보드를 통해 사용자는 자신의 상태를 in 또는 out으로 설정할 수 있으며 메모도 제공 할 수 있습니다. 모든 정보를 단일 테이블에 저장할 계획이었는데 데이터의 예는 다음과 같습니다.

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을 알아 내려고 노력하고 있습니까? 어떤 도움을 주시면 감사하겠습니다.


하위 쿼리 파생 테이블 에서 집계 한 다음 조인합니다.

 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 

다른 방법으로 하위 쿼리를 사용하는 경우 두 번이 아니라 한 번만 테이블을 스캔합니다.

SQL Server 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;

파생 테이블은 작동하지만 이것이 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 상태의 표시를 용이하게합니다.


또 다른 쉬운 방법 :

SELECT Date, User, Status, Notes  
FROM Test_Most_Recent 
WHERE Date in ( SELECT MAX(Date) from Test_Most_Recent group by User)

참조 URL : https://stackoverflow.com/questions/1049702/create-a-sql-query-to-retrieve-most-recent-records

반응형