본문 바로가기
MySql

MySQL은 여러에서 마지막 날짜 레코드를 가져옵니다.

by 베이스 공부 2020. 12. 19.
반응형

내 db에 다음이 있습니다.

ID      datetime             type   value
1094    2013-09-25 09:11:18  HDD      89%
1094    2013-09-25 09:11:18  CPU      55%
1093    2013-09-25 09:11:18  HDD      77%
1093    2013-09-25 09:11:18  CPU      55%
1094    2013-09-25 08:21:28  HDD      85%
1094    2013-09-25 08:21:28  CPU      11%
1093    2013-09-25 07:04:00  HDD      76%

모든 ID 및 유형 레코드에 대한 마지막 날짜를 얻고 싶습니다.

1094    2013-09-25 09:11:18  HDD      89%
1094    2013-09-25 09:11:18  CPU      55%
1093    2013-09-25 09:11:18  HDD      77%
1093    2013-09-25 09:11:18  CPU      55%

 

해결 방법

 

GROUP BY 사용할 수 있지만 작동 방식을 이해하는 것이 중요합니다.

GROUP BY 를 사용하면 행 그룹이 하나로 축소되고 GROUP BY 절에서 사용되지 않는 다른 열에 표시되는 내용은 다음을 사용하여 결정됩니다. 집계 함수 또는 해당 그룹의 임의의 행입니다. MAX () 값 또는 사용한 집계 함수를 포함하는 표시된 행에 해당하는 행을 가져올 수 없습니다. 이는 다음과 같은 쿼리를 수행 할 때 특히 분명해집니다.

SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id

"another_column"은 MIN () 값 또는 MAX () 값을 보유한 행 또는 전혀 표시되지 않는 다른 행에 속할 수 있습니다. MySQL 이외의 다른 RDBMS에서는 사용자가 실수를하거나 올바른 결과를 얻었다 고 생각하는 것을 방지하기 위해 집계 함수를 사용하지 않거나 GROUP BY 절에 나열되지 않은 열을 선택하는 것이 실제로 금지되어 있습니다. .

따라서 귀하의 경우에는 "값"열도 표시하려는 것 같습니다. 위의 이유로 juergen_d의 대답은 잘못된 것입니다. "값"을 선택하지 않았기 때문입니다. 선택하면 올바른 "값"인지 확신 할 수 없습니다. Filipe Silva의 대답은 "가치"로 그룹화되기 때문에 잘못되었습니다. 이렇게하면 실제로 전체 테이블이 반환됩니다. Romesh의 대답은 잘못된 것입니다. MAX () 함수를 두 번 사용하면 분명히 최대 값을 얻을 수 있지만 datetime 값에 해당하는 값은 얻지 못하기 때문입니다.


 

참조 페이지 https://stackoverflow.com/questions/19514532

 

 

반응형

댓글