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

标签 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

但现在我想删除重复的行(cellphone_id 列)并保留每个 cellphone_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;

最佳答案

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

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

关于mysql - 执行 SQL 查询后如何删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55654845/

相关文章:

mysql - 在 JOIN 查询上使用 ORDER BY 进行排序

mysql - MYSQL数据库迁移不丢失记录

sql - 用于插入新数据和更新现有数据的 DB2 SQL 语句

sql - 具有递归的 CTE - row_number() 聚合

php - 使用 php 检查 MySQL 中是否存在某个值

mysql - 如何获取表中具有多个匹配行值的行数?

php - 使用复选框不起作用删除多个 mysql 行

sql - 使用返回多行的子查询进行更新

mysql - 在 shell 上导入 MySQL 转储,文件名中包含变量

php - 获取引用对象的数据