programing

최대값에서 왼쪽 조인

newstyles 2023. 10. 26. 20:49

최대값에서 왼쪽 조인

다음과 같은 두 개의 표가 있다고 가정합니다.

STUDENT
studentid   lastname   firstname
1           Smith      John
2           Drew       Nancy

STUDENT_STORY
studentid   dateline   storyid   status
1           1328313600 10        2
1           1328313601 9         1
2           1328313602 14        2
2           1328313603 12        1

이제 학생 스토리 테이블에 있는 그 학생의 최신 스토리와 함께 각 학생을 선정할 수 있는 SQL 쿼리가 필요합니다.

나는 이것을 시도하고 있습니다.

SELECT s.*, ss.*
FROM student AS s
LEFT JOIN (
    SELECT *
    FROM student_story
    WHERE student_story.studentid = s.studentid
    ORDER BY dateline DESC LIMIT 1
) AS ss ON (ss.studentid = s.studentid)

그러나 이 쿼리는 작동하지 않습니다.s.studentid가 하위 쿼리의 where 절에서 알 수 없는 필드라고 불평합니다.

제가 하고 싶은 일을 어떻게 하면 이룰 수 있을지 제안 부탁드립니다.

감사해요.

다음과 같은 것을 시도해 보십시오.

SELECT
  s.*,
  ss.*
FROM
  student AS s
LEFT JOIN
  student_story AS ss
ON (ss.studentid = s.studentid)
WHERE ss.dateline = (
  SELECT
    MAX(dateline)
  FROM
    student_story AS ss2
  WHERE
    ss2.studentid = s.studentid
)
SELECT 
    s.sale_id,
    s.created_at,
    p.created_at,
    DATEDIFF(p.created_at, s.created_at) AS days
FROM
    pos_sales s
        LEFT JOIN
    pos_payments p ON p.sale_id = s.sale_id
        AND
    p.created_at = (SELECT 
            MAX(p2.created_at)
        FROM
            pos_payments p2
        WHERE
            p2.sale_id = p.sale_id)
SELECT s.*, ss.*
FROM student AS s
LEFT JOIN (

SELECT * FROM student_story    
ORDER BY dateline DESC LIMIT 1
) 
AS ss ON (ss.studentid = s.studentid)

student_story 테이블의 각 행에 자동 ID와 고유 ID를 추가해야 합니다.

그러면 여러분은 그들을 구별할 것입니다. (학생 이야기를 가정합니다.new_id )

select s.*, ss.*
from student s
left join student_story ss on ss.studentid = s.userid
where ss.new_id = ( select ss.new_id from student s
    group by dateline
    order by dateline desc
    limit 1
)

또 다른 접근법은 다음과 같은 것입니다.LEFT JOIN와 함께NOT EXISTS()조건.시나리오에 따라 약간의 유연성을 제공할 수 있지만, 동일한 항목이 두 개 있는 경우 중복된 결과를 나타낼 수도 있습니다.dateline학생당:

SELECT s.*, ss.*
FROM student AS s
LEFT JOIN student_story AS ss ON ss.studentid = s.studentid AND NOT EXISTS
    (SELECT * FROM student_story AS ss2
     WHERE ss2.studentid = ss.studentid AND ss2.dateline > ss.dateline)

LEFT JOIN ON MAX VALUE(S) 동일한 ID를 가진 필드의 최신 버전 [max ()]에 가입하는 방법에 대한 - quite 상세 - 쿼리 예제입니다. 여기서 이러한 필드의 최신 버전은 각 테이블에서 개별적으로 다를 수 있습니다. 예를 들어 표 1의 ID=1의 최신 버전은 표 2의 ID=1과 일치합니다.

select td.task_id, td.duration, oda.task_id, oda.org_drtn_diff

from

(select * from task_dtl
where date_efctv = (select max(date_efctv) from task_dtl td where task_dtl.task_id=td.task_id)) td

left join
 
(select * from org_driven_actvty where date_efctv = (select max(date_efctv) from org_driven_actvty oda where org_driven_actvty.task_id=oda.task_id)) oda

on 

oda.task_id=td.task_id ; 

이 가입자가 해야 할 일:

SELECT s.*, ss.*
FROM student_story AS ss
LEFT JOIN student AS s
    ON student_story.studentid = s.userid
GROUP BY ss.studentid

GROUP BY마지막 행을 사용해야 하므로 마지막 이야기 = 마지막 행을 사용할 수 없습니다.

GROUP BY ss.studentid, ss.dateline DESC

잘 모르니 결과와 함께 댓글 부탁드립니다.

언급URL : https://stackoverflow.com/questions/9144677/left-join-on-max-value