>

다음 sql 가 있습니다  질문. max(v.id) 만 선택하고 싶습니다  그리고 모든 v.id 가 아닙니다  주어진 p_id 에 대해 .

제발 도와주세요?

SELECT
    v.id,
    u.firstname as author_name,
    u.lastname as author_surname,
FROM ps_versioning as v
INNER JOIN u_users as u ON u.user_id = v.user_id
where v.patient_id = p_id

허용 된 솔루션을 제외하고 order by v.id desc Limit 1 를 사용하여 다른 방법을 찾았습니다. . 아래의 전체 예를 참조하십시오 :

SELECT
    v.id,
    u.firstname as author_name,
    u.lastname as author_surname,
FROM ps_versioning as v
INNER JOIN u_users as u ON u.user_id = v.user_id
where v.patient_id = p_id
order by v.id desc Limit 1


  • 답변 # 1

    u_users 테이블이 ps_versioning 테이블 행을 필터링하는 데 사용되고 있다고 가정하면 하위 쿼리에 참여 :-

    SELECT
        v.id,
        u.firstname as author_name,
        u.lastname as author_surname
    FROM ps_versioning v
    INNER JOIN u_users u ON u.user_id = v.user_id
    INNER JOIN
    (
    SELECT v.patient_id, MAX(v.id) AS max_id
    FROM ps_versioning v
    INNER JOIN u_users u ON u.user_id = v.user_id
    WHERE v.patient_id = p_id
    GROUP BY v.patient_id
    ) sub0
    ON v.id = sub0.max_id
    
    

    ps_versioning에 users 테이블에 일치하는 행이없는 행이 없으면 하위 쿼리에서 추가 내부 조인을 생략 할 수 있습니다.

    SELECT
        v.id,
        u.firstname as author_name,
        u.lastname as author_surname
    FROM ps_versioning v
    INNER JOIN u_users u ON u.user_id = v.user_id
    INNER JOIN
    (
    SELECT v.patient_id, MAX(v.id) AS max_id
    FROM ps_versioning v
    WHERE v.patient_id = p_id
    GROUP BY v.patient_id
    ) sub0
    ON v.id = sub0.max_id
    
    

  • 답변 # 2

    이 작업을 수행합니다 :

    SELECT
        v.id,
        u.firstname as author_name,
        u.lastname as author_surname,
    FROM ps_versioning as v
    INNER JOIN u_users as u ON u.user_id = v.user_id
    where v.patient_id = p_id
    AND v.id = (SELECT MAX(id) FROM ps_versioning GROUP BY patient_id)
    
    

관련 자료

  • 이전 c# - Dictionary 에서 중복을 고유 한 문자열로 바꿉니다
  • 다음 data structures - 해시 테이블 - 해시 함수와 압축 함수가 분리되어야하는 이유는 무엇입니까?