遇到重复项时使用CASE获取所需的行

时间:2017-10-15 09:17:40

标签: mysql

据我所知,在使用CASE时,它会选择它可以实现的第一个值。但是,如果有重复,我想首先得到一个特定的值,如果没有,那么选择另一个。

例如,如果我的表格如下:

date      email        ordered
1/1/17    email_1      N
3/1/17    email_1      Y
1/1/17    email_2      Y
1/1/17    email_3      N

我想要的是这个:

date      email        ordered
3/1/17    email_1      Y
1/1/17    email_2      Y
1/1/17    email_3      N

我当前的查询与下面的内容类似,但由于CASE 'N'因为先找到email_1 NamesTable而无效,因此无效。

  

CASE WHEN ordered ='Y'然后命令ELSE'N'END

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

要获得所需的结果,您可以使用字符串函数聚合从聚合结果集中选择单个值。

select
substring_index(group_concat(`date` order by ordered desc),',',1) `date`,
email,
substring_index(group_concat(`ordered` order by ordered desc),',',1) `ordered`
from demo
group by email
  

从您的帖子中我假设您想为每封电子邮件选择一条记录,并优先考虑ordered ='Y'。

DEMO