[英]Join to nth highest value in another table in MySQL
I know how to join with the MAX or MIN value of a column from another table, for example: 我知道如何与另一个表中一列的MAX或MIN值联接,例如:
SELECT id, user_id, date_created, invite_date FROM user
INNER JOIN (
SELECT user_referral.user_id, MIN(user_referral.date_created) as invite_date
FROM user_referral
GROUP BY user_referral.user_id) AS invtable
ON user.id = invtable.user_id
But how do I do this for the nth highest or lower value of user_referral.date_created
instead of just MAX or MIN ? 但是,如何对
user_referral.date_created
的第n个最高或较低的值(而不只是MAX或MIN)执行此操作 ?
Just use limit/offset
: 只需使用
limit/offset
:
SELECT u.id, u.user_id, u.date_created, u.invite_date
FROM user u INNER JOIN
(SELECT ref.*
FROM user_referral ref
GROUP BY ref.user_id
ORDER BY ref.date_created
LIMIT 1 OFFSET 8
) invtable
ON u.id = invtable.user_id;
Just as a note, this returns the ninth row, because offset counting starts at 0
and not 1
. 请注意,这将返回第9行,因为偏移量计数从
0
开始,而不是1
。
EDIT: 编辑:
Now I see. 现在我明白了。 You can do it this way:
您可以这样操作:
SELECT u.id, u.user_id, u.date_created, u.invite_date
FROM user u INNER JOIN
(SELECT ref.*,
(@rn := if(@uid = ref.user_id, @rn + 1,
if(@uid := ref.user_id, 1, 1)
)
) as rn
FROM user_referral ref cross join
(select @rn := 0, @uid := -1) vars
ORDER BY ref.user_id, ref.date_created
) invtable
ON u.id = invtable.user_id
WHERE rn = 8;
You could try using a LIMIT N
statement and then doing Max or Min like so (I used 8 for this example): 您可以尝试使用
LIMIT N
语句,然后像这样进行Max或Min(在此示例中,我使用了8):
SELECT id, user_id, date_created, invite_date FROM user
INNER JOIN (
SELECT user_id, MAX(user_referral.date_created) as invite_date
FROM (SELECT ref.user_id as user_id, MIN(ref.date_created) as invite_date
FROM user_referral ref
GROUP BY ref.user_id
ORDER BY ref.date_created
LIMIT 8)) AS invtable
ON user.id = invtable.user_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.