MSSQL 가장 최신 날짜의 데이터 채택완료
안녕하세요. 제가 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개
저도 이런 비슷한 상황에 고생을 했던 기억이 있네요 ㅎㅎ
아마 하위질의, 서브쿼리를 접목하셔야 될 것 같습니다.
조인할때 서브쿼리로 먼저 가장 최신날짜별로 조회를 하고 거기에 조인을 해서 가져오시면 될겁니다.
댓글을 작성하려면 로그인이 필요합니다.
</p>
<p>SELECT
UserId,
CommuteType,
CommuteDateTime
FROM table
WHERE (UserID, CommuteDateTime)
IN (
SELECT
UserID,
MAX(CommuteDateTime) AS CommuteDateTime
FROM table
GROUP BY UserID
)
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인