执行SQL查询后如何删除重复的行

时间:2019-04-12 15:20:22

标签: mysql sql

我创建此SQL查询:

SELECT * FROM favorite_user_cellphone fc
WHERE user_id = 123 AND unfavorited_at is null
ORDER BY favorited_at DESC;

此查询的结果如下:

favorite_id  | user_id |  cellphone_id |  favorited_at        |   unfavorited_at
     7           123         1225       2019-04-13 12:35:02     null
     5           123         1225       2019-04-11 12:35:02     null
     2           123         1275       2019-04-09 13:00:02     null
     1           123         1225       2019-04-09 12:35:02     null

但是现在我想删除重复的行(column laptop_id列),并为该行保留每个mobile_id的最新日期

所以,最终结果应该是这样的:

favorite_id  | user_id |  cellphone_id |  favorited_at        |   unfavorited_at
     7           123         1225       2019-04-13 12:35:02     null
     2           123         1275       2019-04-09 13:00:02     null

我这样做:

SELECT * FROM favorite_user_cellphone fc
WHERE user_id = 123 AND unfavorited_at is null
ORDER BY favorited_at DESC;

2 个答案:

答案 0 :(得分:1)

可以在现有结果表上运行的另一种解决方案可能是:

select fuc.*
from favorite_user_cellphone fuc
inner join
(
   select cellphone_id, 
          max(favorite_id) as favorite_id
   from favorite_user_cellphone
   where user_id = 123
   group by cellphone_id
) t on fuc.favorite_id = t.favorite_id

答案 1 :(得分:0)

您可以使用聚合函数max()并按

分组
No such file or directory: '/work/data/get_info name=Mike

如果使用select *,还将返回所有记录,以获取可能产生意外结果的信息..因此,您应仅选择需要应用聚合函数以减少结果的列