MSSQL 가장 최신 날짜의 데이터

MSSQL 가장 최신 날짜의 데이터

QA

MSSQL 가장 최신 날짜의 데이터

본문

안녕하세요. 제가 PHP로 코드를 작성하던 도중, MSSQL 쿼리문 작성에서 도저히 모르겠어서 질문 드립니다.

 

우선 데이터는 아래와 같습니다.

1935365004_1653369560.0079.png

 

UserId별로 가장 최신 날짜(CommuteDateTime)의 UserId값과 CommuteType을 Select 하고 싶습니다.

Select 한 후에 다른 테이블과 Join 해줄 예정입니다.

 

원하는 결과는 아래와 같습니다.

UserID CommuteType CommuteDateTime
150101 5 2022-05-23 17:03:13
220301 4 2022-05-24 09:23:03

 

제가 작성한 쿼리문은 다음과 같습니다.


SELECT UserId, MAX(CommuteDateTime) as checkTime
FROM table
GROUP BY UserId

1935365004_1653369681.0023.png

 

이렇게 쿼리를 작성하면 가장 최신 날짜값과 해당하는 UserId값은 가져오지만 CommuteType은 가져오지 못합니다.

그래서 SELECT에 CommuteType을 넣어주면 CommuteType이 집계함수나 GROUP BY 절에 없기때문에 SELECT에서 사용할수 없다는 에러가 생깁니다.


SELECT UserId, CommuteType, MAX(CommuteDateTime) as checkTime    // CommuteType 오류
FROM table
GROUP BY UserId

그렇다고 GROUP BY에 CommuteType을 넣어주면 UserId별로 묶은게 아니라서 모든 값이 출력됩니다.

 

혹시 UserId별로 가장 최신 날짜(CommuteDateTime)의 UserId값과 CommuteType을 Select하려면 어떤 쿼리를 짜야하는지 알 수 있을까요?

감사합니다.

 

이 질문에 댓글 쓰기 :

답변 3

저도 이런 비슷한 상황에 고생을 했던 기억이 있네요 ㅎㅎ

아마 하위질의, 서브쿼리를 접목하셔야 될 것 같습니다.

 

조인할때 서브쿼리로 먼저 가장 최신날짜별로 조회를 하고 거기에 조인을 해서 가져오시면 될겁니다.

SELECT a.UserId, a.CommuteType, a.CommuteDateTime 

FROM table a left join table b on

a.CommuteDateType > b.CommuteDateType 

where b.CommuteType is null 

제한 사항이 하나 있습니다.

ComuteDateType이 같은 값이 있으면 중복건이 나옵니다.

 


SELECT
    UserId,
    CommuteType,
    CommuteDateTime
    FROM table
        WHERE (UserID, CommuteDateTime)
        IN (
            SELECT
                UserID,
                MAX(CommuteDateTime) AS CommuteDateTime
                FROM table
                GROUP BY UserID
        )
답변을 작성하시기 전에 로그인 해주세요.
전체 123,592 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT