mysql - 选择最大的重复行和唯一行

标签 mysql sql

我有一个像这样的 MySQL 表:

id  | header            | cat   | newsfeed  | user      | hide  | update
1   | header12345678    | Manga | news1     | william   | 0     | 0
3   | header12345679    | Manga | news2     | william   | 0     | 1
4   | header12345610    | Manga | news3     | william   | 0     | 1
5   | 12345             | Manga | news4     | william   | 0     | 0
6   | 12346             | Manga | news5     | william   | 0     | 0
7   | 12347             | Manga | news6     | william   | 0     | 6

我想选择重复的 update 中最大的 id,如果没有重复的,那么只选择唯一一个不是重复的.

问题是,我已经设置好了,所以原始行有 update=0 并且当 update 不为 0 时,它等于原始行的 id。

所以我希望 SQL 语句的结果是:

id  | header            | cat   | newsfeed  | user      | hide  | update
4   | header12345610    | Manga | news3     | william   | 0     | 1
5   | 12345             | Manga | news4     | william   | 0     | 0
7   | 12347             | Manga | news6     | william   | 0     | 6

因为 id=4 具有重复项中最大的 id,id=5 没有重复项,而 id=7 具有最大的 id的重复项。

我试过这个:

SELECT *
FROM newsfeed sr1
WHERE NOT EXISTS (
    SELECT *
    FROM  newsfeed sr2
    WHERE sr1.update = sr2.update AND
          sr1.id < sr2.id AND
          sr2.id > 0
)

没有我想象的那么好。

最佳答案

试试这个查询我的 friend :

select * from newsfeed where id in
(select max(id) from
(select id,
case when update = 0 then id else update end update1
from newsfeed)t1
group by update1);

SQL Fiddle

关于mysql - 选择最大的重复行和唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22280477/

相关文章:

mysql - 如何为所有用户选择所有最新记录

sql - 基于Order By SQL消除重复

SQLCMD 在脚本到达的第一个 GO 处停止

java - 获取 LIMIT 子句中预期的错误非负整数值

sql - 同时对查询进行排序和随机化

mysql - 如何删除 MySQL 字段中的前导和尾随空格?

MySQL 在记分牌的多个数据集上排名

mysql - MySQL 触发器可能会静默失败吗?

php - 使用 php 连接到 sql "server group"以对多个数据库运行查询

mysql - Workbench 模型同步/Forward Engineer 可能存在错误?