MySQL(MardiaDB) 종속 테이블의 최신 레코드에서 정보를 가져오는 방법은 무엇입니까?
2개의 기본 테이블이 있는 MySQL 데이터베이스(일부 서버에서는 MariaDB로도 작동)가 있습니다.하나는tickets그리고 또 하나는ticket_contents아래와 같이:
Tickets
+----+---------+-------------+
|id + subject | Create date |
+----+---------+-------------+
|1 | Ticket1 | 2020-05-24 |
+----+---------+-------------+
|2 | Ticket2 | 2020-05-25 |
+----+---------+-------------+
Ticket Contents
+----+-----------+---------------------+-------------+
|id + ticket_id | update date_time | content |
+----+-----------+---------------------+-------------+
|1 | 1 | 2020-05-24 08:30:15 | msg1 |
+----+-----------+---------------------+-------------+
|1 | 2 | 2020-05-25 10:05:15 | msg2 |
+----+-----------+---------------------+-------------+
|1 | 1 | 2020-05-25 12:15:00 | msg3 |
+----+-----------+---------------------+-------------+
제가 필요로 하는 것은 전체 티켓에 대한 최신 업데이트 순서와 최신 콘텐츠 기록 시간이 포함된 티켓 목록입니다.
+----------+----------+---------------------+
|ticket_id |subject |last_update |
+----------+---_------+---------------------+
|1 | Ticket1 | 2020-05-25 12:15:00 |
+----------+----------+---------------------+
|2 | Ticket2 | 2020-05-25 10:05:15 |
+----------+----------+---------------------+
이 코드는 제가 작성한 코드이지만 올바른 최신 자녀 기록 정보를 제공하지 않습니다.
SELECT t.id, c.date_time FROM tickets t JOIN
(SELECT ticket_id, date_time FROM tickets_contents GROUP BY ticket_id) c on t.id = c.ticket_id
group by t.id order by date_time desc
제 SQL 코드를 수정하는 것을 도와주실 수 있나요?
거의 맞았습니다. 그룹 BY의 가장 높은 날짜를 얻으려면 MAX를 사용해야 합니다.
SELECT t.id,t.subject,t2.maxtime FROM Tickets t INNER JOIN (SELECT MAX(`update date_time`) maxtime,ticket_id FROM `Ticket Contents` GROUP BY ticket_id) t2 ON t.id = t2.ticket_idid | 주제 | 최대 시간-: | :------ | :------------------1 | 티켓 1 | 2020-05-25 12:15:002 | 티켓2 | 2020-05-25 10:05:15
db<>여기로 이동
DBMS 버전이 10.2+인 경우 다음과 같은 창 기능이 있습니다.RANK()최신 업데이트가 있는 티켓을 확인하는 데 사용할 수 있습니다.
SELECT tt.id AS ticket_id, tt.subject, tt.date_time AS last_update
FROM
(
SELECT t.*, tc.date_time,
RANK() OVER (PARTITION BY tc.ticket_id ORDER BY tc.date_time DESC ) AS rnk
FROM tickets t
JOIN tickets_contents tc
ON tc.ticket_id = t.id
) tt
WHERE rnk = 1
ORDER BY ticket_id;
어디에PARTITION BY각 열의 그룹화를 나타냅니다(이 경우: ticket_id).ORDER BY ... DESC마지막 레코드(이 경우: 최신)를 필터링하는 데 사용됩니다.
언급URL : https://stackoverflow.com/questions/62003645/how-to-fetch-the-information-from-latest-record-in-mysql-mardiadb-dependent-ta
'programing' 카테고리의 다른 글
| PHP에서 아포스트로피(') 대신 ™를 받는 중 (0) | 2023.07.23 |
|---|---|
| 도커 컨테이너에서 SQL 스크립트 실행 중 (0) | 2023.07.23 |
| 페이지 로드가 완료될 때까지 페이지 로드 div를 표시하는 방법은 무엇입니까? (0) | 2023.07.23 |
| PHP에서 Bash 명령 실행 (0) | 2023.07.23 |
| 모노레포에서 유형 스크립트 라이브러리 공유 (0) | 2023.07.18 |