이 부분이 쿼리에 있습니다.
GROUP BY trackid
ORDER BY MAX(history.date) DESC
그리고 그룹화 할 때 각 그룹에 대한 최대 날짜가있는 행을 반환합니다. 왜 이런 행동입니까? 순서는 그룹화가 아닌 전체 행에서 작동해야합니다.?!?!?
수정 (예)
이것은 내 전체 쿼리입니다.
SELECT tracklist.value, history.date
FROM history JOIN tracklist ON history.trackid=tracklist.trackid
ORDER BY history.date DESC
결과는 다음과 같습니다.
tracklist3 2011-04-27 15:40:36
tracklist2 2011-04-27 13:15:43
tracklist2 2011-04-02 00:30:02
tracklist2 2011-04-01 14:20:12
tracklist1 2011-03-02 14:13:58
tracklist1 2011-03-01 12:11:50
보시다시피 모든 라인은 history.date로 올바르게 정렬됩니다. Now I'd like to group them, keeping for each group the row with MAX history.date. 따라서 출력은 다음과 같아야합니다.
tracklist3 2011-04-27 15:40:36
tracklist2 2011-04-27 13:15:43
tracklist1 2011-03-02 14:13:58
내가 볼 :
GROUP BY trackid
ORDER BY MAX(history.date) DESC
올바르게 작동하지만 작동 이유를 이해하지 못합니다. :) Order by는 그룹화가 아닌 전체 행에 대한 것입니다 ....
해결 방법
SELECT trackid, MAX (history.date) ... GROUP BY trackid ORDER BY MAX (history.date) DESC
라고 말하면 실제로 다음과 같이 말합니다. "각 트랙 목록에 대해 가장 최근 기록 항목 표시 가장 최근 기록 항목이 (전체) 가장 최근 인 트랙 목록을 먼저 보여주세요. "
ORDER BY
는 그룹화 후 에 적용됩니다 (이것이 SQL에서 GROUP BY
뒤에 오는 이유입니다).
예제에서는 SELECT tracklist.value, MAX (history.date)
대신 SELECT tracklist.value, history.date
가 있습니다. 이는 잘못된 것이며 불행히도 MySQL은 경고를 표시하지 않지만 재량에 따라 무작위 history.date
를 선택합니다.
참조 페이지 https://stackoverflow.com/questions/5820722
'MySql' 카테고리의 다른 글
MySQL 삭제-대상 테이블을 지정할 수 없습니까? (0) | 2020.10.09 |
---|---|
MySQL의 OUTPUT 절 (0) | 2020.10.09 |
MySQL SQLSTATE [HY000] [1045] 사용자 'root'@ 'localhost'에 대한 액세스가 거부되었습니다 (암호 사용 : NO). DB_HOST가 localhost로 설정 됨 (0) | 2020.10.09 |
MySQL 서버를 통해 MySQL 데이터베이스에 연결 (0) | 2020.10.09 |
MySQL auto_increment 기본 키 필드를 존중하지 않는 Hibernate (0) | 2020.10.09 |
댓글