최대값에서 왼쪽 조인
다음과 같은 두 개의 표가 있다고 가정합니다.
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
'programing' 카테고리의 다른 글
git 원격 분기 풀에서 원격 참조를 찾을 수 없습니다. (0) | 2023.10.26 |
---|---|
새 데이터베이스 항목을 삽입하는 것이 항목이 존재하는지 먼저 확인하는 것보다 빠릅니까? (0) | 2023.10.26 |
성능 손실을 감수하면서 'if' 문으로 두 개의 유사한 커널을 통합해야 합니까? (0) | 2023.10.26 |
값을 통화로 설정(in)값을 통화로 설정(in) (0) | 2023.10.26 |
jGravity 양식 제출 후 콜백 쿼리 (0) | 2023.10.26 |