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 |
제가 작성한 쿼리문은 다음과 같습니다.
SELECT UserId, MAX(CommuteDateTime) as checkTime
FROM table
GROUP BY UserId
이렇게 쿼리를 작성하면 가장 최신 날짜값과 해당하는 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
)