首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL为每个用户选择最后一个条目,而不是下一个条目

MySQL为每个用户选择最后一个条目,而不是下一个条目
EN

Stack Overflow用户
提问于 2015-03-27 16:09:59
回答 2查看 82关注 0票数 0

我有两张表格,一张是用户(招聘人员),另一张是简历

代码语言:javascript
复制
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编制的。

  • user_1发布的最后一份简历
  • user_2发布的最后一份简历
  • user_3发布的最后一份简历
  • User_发布的最后一份简历..。
  • ……
  • user_1发布的下一份简历
  • user_2发布的下一份简历
  • user_3发布的下一份简历
  • User_发布的下一份简历..。
  • ……

我想要的是每个用户的一个条目(最后一个),而不是每个用户的下一个条目:

代码语言:javascript
复制
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...

我已经找到了这个解决办法--它不起作用

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-31 09:19:57

我找到了这个解决方案,它似乎奏效了:

代码语言:javascript
复制
    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子句}中。

票数 0
EN

Stack Overflow用户

发布于 2015-03-27 16:22:18

您的问题的正确版本是:

代码语言:javascript
复制
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中表达式的计算顺序。您可以从其他表中加入其他信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29305210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档