programing

마지막 알 수 없는 ID로 레코드 그룹 가져오기

elecom 2023. 8. 26. 10:29
반응형

마지막 알 수 없는 ID로 레코드 그룹 가져오기

알 수 없는 ID로 그룹화된 특정 레코드 그룹의 항목을 선택하려는 로그 테이블이 있습니다.
아래 표를 참조하십시오. 열은 더 있지만 질문과 관련이 없습니다.

-------------------------------------------------------
| id | details    | deviceId | processId | timestamp  |
-------------------------------------------------------
| 1  | startup    | 753      | 538       | 1546346190 |
| 2  | processing | 753      | 538       | 1546346192 |
| 3  | logging    | 753      | 538       | 1546346217 |
| 4  | done       | 753      | 538       | 1546346220 |
| 5  | startup    | 567      | 539       | 1590648690 |
| 6  | processing | 567      | 539       | 1590648692 |
| 7  | logging    | 567      | 539       | 1590648717 |
| 8  | done       | 567      | 539       | 1590648720 |
| 9  | startup    | 753      | 540       | 1590655888 |
| 10 | processing | 753      | 540       | 1590655890 |
| 11 | logging    | 753      | 540       | 1590655915 |
| 12 | email sent | 753      | 540       | 1590655918 |
| 13 | done       | 753      | 540       | 1590655920 |
-------------------------------------------------------

한 장치에 대해 한 프로세스의 마지막 항목을 가져오려고 합니다.
다음과 같은 질문을 하면 장치의 모든 레코드가 표시됩니다.

SELECT *
FROM logtable
WHERE deviceId = 753
ORDER BY timestamp DESC

processId가 540인지 모르는데 어떻게 하나의 쿼리에서 processId 540의 레코드만 가져올 수 있습니까?

나는 이미 하위 질의와 함께 그것을 시도했습니다:

SELECT *
FROM logtable
WHERE processId IN (
   SELECT processId
   FROM logtable
   WHERE deviceId = 753
   ORDER BY timestamp DESC
   LIMIT 1
)

하지만 MariaDB는 받아들이지 않습니다.LIMIT비밀리에

참고로 이 태그 아래에서 가장 자주 묻는 질문입니다.표준 솔루션은 다음과 같습니다.

SELECT x.*
  FROM logtable x
  JOIN 
     ( SELECT processId
            , MAX(timestamp) timestamp
         FROM logtable
        WHERE deviceId = 753
        GROUP
           BY processid
     ) y
    ON y.processid = x.processid
   AND y.timestamp = x.timestamp

사용하다=:

SELECT l.*
FROM logtable l
WHERE processId = (SELECT l2.processId
                   FROM logtable l2
                   WHERE l2.deviceId = 753
                   ORDER BY l2.timestamp DESC
                   LIMIT 1
                  );

필요한 것은IN하위 쿼리가 여러 행을 반환하는 경우.

언급URL : https://stackoverflow.com/questions/62063176/get-a-group-of-records-by-last-unknown-id

반응형