테스트 사이트 - 개발 중인 베타 버전입니다

MSSQL 가장 최신 날짜의 데이터 채택완료

dhdl52 3년 전 조회 1,500

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

 

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

 

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

 

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

</p>

<p>SELECT UserId, MAX(CommuteDateTime) as checkTime</p>

<p>FROM table</p>

<p>GROUP BY UserId</p>

<p>

 

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

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

</p>

<p>SELECT UserId, CommuteType, MAX(CommuteDateTime) as checkTime    // CommuteType 오류

FROM table

GROUP BY UserId</p>

<p>

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

 

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

감사합니다.

 

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
하틴
3년 전

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

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

 

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

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

</p>

<p>SELECT

    UserId,

    CommuteType,

    CommuteDateTime

    FROM table

        WHERE (UserID, CommuteDateTime)

        IN (

            SELECT

                UserID,

                MAX(CommuteDateTime) AS CommuteDateTime

                FROM table

                GROUP BY UserID

        )

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

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이 같은 값이 있으면 중복건이 나옵니다.

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인