[英]MySQL Select Last Entry for each User, than the next entry
我有2个表,一个表用于用户 (招聘者),另一个表用于CV
CREATE TABLE users (
id int primary,
email string,
company string
)
CREATE TABLE cv (
id int primary,
title string,
user_id int,
created_date datetime
)
用户可以发布许多简历 。
所以我想要的是从created_date到每个用户中选择最后一个简历,而不是下一个简历等等。
结果将是这样的:
简历列表由created_date DESC排序
我想要的是每个用户的一个条目(最后一个),而不是每个用户的下一个条目:
last Entry for user 1
last entry for user 2
last entry for user 3
last entry for user 4
....and so on...than
the entry before the last (because entries are ordred by date desc) for user 1
the entry before the last for user 2
the entry before the last for user 3
...and so on...
我发现此解决方案不起作用
SELECT IF(@prev != a.`company_name`, @rownum:=1, @rownum:=@rownum+1)
as rownumber, @prev:=a.`company_name`, a.* FROM
(SELECT `cv`.`id` AS `id` , `cv`.`company_name` FROM `cv` ,
(SELECT @rownum := 0, @prev:='') sq ORDER BY `created_date` DESC) a order by rownumber
您的问题的正确版本是:
select cv.*
from (select cv.*,
(@rn := if(@c = company_name, @rn + 1,
if(@c := company_name, 1, 1)
)
) as rn
from cv cross join
(select @c := '', @rn := 0) vars
order by company_name, created_date desc
) cv
order by rn, user_id;
您想将所有变量赋值放在单个表达式中,因为MySQL不能保证select
中表达式的求值顺序。 您可以加入其他表中的其他信息。
我找到了这个解决方案,它似乎可以工作:
SELECT IF(@prev != a.`user_id`, @rownum:=1, @rownum:=@rownum+1) as rownumber,
@prev:=a.`user_id`, a.* FROM (SELECT `cv`.`id` AS `id` , `cv`.`company_name` ,
cv.created_date, `cv`.`user_sid` FROM `cv` , (SELECT @rownum := 0, @prev:='') sq
{WHERE CLAUSE} ORDER BY `cv`.`user_id` ASC, `cv`.`created_date` DESC) a order by rownumber,
created_date desc;
如果您有where子句,可以将其放在{WHERE CLAUSE}中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.