[英]LEFT JOIN on Max Value
假設我有以下兩個表:
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.*, ss.*
FROM student AS s
LEFT JOIN (
SELECT * FROM student_story
ORDER BY dateline DESC LIMIT 1
)
AS ss ON (ss.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_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
我不確定,請對結果發表評論
您需要在student_story表的每一行上添加一個自動和唯一ID。
然后你會區分它們。 (假設studentstory.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
)
另一種方法是使用NOT EXISTS()
條件進行LEFT JOIN
。 根據具體情況,這可以提供更多的靈活性; 但是,如果每個學生有兩個具有相同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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.