programing

SQL Group By and Order - 테이블의 가장 최근 항목에 대한 세부 정보 검색

yellowcard 2023. 6. 9. 21:56
반응형

SQL Group By and Order - 테이블의 가장 최근 항목에 대한 세부 정보 검색

각 bot_id에 대한 최신 Entry를 반환하는 SQL Query를 만들고 싶습니다.

현재 요청은 다음과 같이 보이지만 항상 첫 번째 Entry를 반환합니다. DESC & ASC는 아무런 차이가 없습니다.

SELECT bot_id, id
FROM t_request_history
GROUP BY bot_id
ORDER BY request_time DESC

표는 다음과 같습니다.


t_request_history

이드 bot_id 부탁한다 대답 오류 request_time
1 usr_e74ae42b-080c-48e0-9e6c a a 0 2021-09-16 23:37:10
2 usr_e74ae42b-080c-48e0-9e6c a a 1 2021-09-16 23:37:35
3 usr_e74ae42b-080c-48e0-9e6c a a 1 2021-09-16 23:43:20
4 삭제 1 1 1 2021-09-16 23:44:21
5 삭제 1 1 0 2021-09-16 23:44:32
6 삭제 1 1 0 2021-09-16 23:44:41



원하는 결과

bot_id 이드
삭제 6
usr_e74ae42b-080c-48e0-9e6c 3

실제 결과

bot_id 이드
삭제 4
usr_e74ae42b-080c-48e0-9e6c 1

Is there any way to make this query work?

당신의 것처럼 보입니다.id값은 시간이 지남에 따라 증가합니다.즉, 테이블의 새 항목이 더 높은 것 같습니다.id이전 항목보다 많은 값을 입력합니다.이게 사실이라면

SELECT bot_id, MAX(id) id
FROM t_request_history
GROUP BY bot_id

당신이 원하는 것을 얻을 수 있습니다.

만약에id값은 시간에 따라 증가하지 않습니다. 각 bot_id에 대한 최신 시간을 찾기 위해 하위 쿼리를 사용해야 합니다.

                 SELECT bot_id, MAX(request_time) request_time
                   FROM t_request_history
                  GROUP BY bot_id

그런 다음 하위 쿼리를 다음과 같이 테이블에 결합합니다.

SELECT a.bot_id, a.id
  FROM t_request_history a
  JOIN (
                    SELECT bot_id, MAX(request_time) request_time
                      FROM t_request_history
                     GROUP BY bot_id
       ) b   ON a.bot_id = b.bot_id
            AND a.request_time = b.request_time

조인 조건은 테이블에서 최신 시간이 있는 행만 선택합니다.

창/분석 기능을 사용하여 이 작업을 수행할 수 있습니다.

SELECT distinct
 bot_id, MAX(request_time) OVER(PARTITION BY bot_id)
FROM t_request_history
;

SQL 중간

@ MariaDB WindowFunction Max 사용 설명서에 대한 자세한 내용도 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/69215714/sql-group-by-and-order-retrieve-detail-for-most-recent-entries-in-table

반응형