sql - MySQL:分组依据和 IF 语句

标签 sql mysql group-by

默认情况下,parent_id = 0。我想选择 parent_id = 0 的所有记录,并且仅选择 parent_id > 0 的最后一条记录.

我尝试了这个,但没有成功:

SELECT * FROM `articles`
  IF `parent_id` > 0 THEN
GROUP BY `parent_id`
HAVING COUNT(`parent_id`) >= 1
END;
ORDER BY `time` DESC

我的意思是,如果有几条parent_id = 2的记录,则只应返回其中一条。另外,如果有多条parent_id = 5的记录,则仅返回其中一条。换句话说,除了parent_id = 0 的记录外,每个parent_id 的记录不得超过1 条。

解决办法是什么?

最佳答案

如果我很好地理解你的问题,你需要所有parent_id == 0的记录,并且只需要其他parent_id's'time'列的最大值的记录?我认为 parent_id + time 是唯一的。

 SELECT a.* FROM `articles` a 
 INNER JOIN 
 (SELECT parent_id, MAX(`time`) AS `time` FROM `articles` WHERE parent_id >0) t
 ON (t.parent_id = a.parent_id AND a.`time` = t.`time`)

 UNION
 SELECT * FROM `articles` WHERE parent_id = 0;

关于sql - MySQL:分组依据和 IF 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2860699/

相关文章:

mysql - SQL 查询改进 - 仅当 A>B 时才选择 X,其中 A 和 B 值在变量的范围内

sql - 如何解决 SQLZOO 选择名称部分中的 #7

sql - 如何编写 SQL 脚本来查找 SQL Server 数据库的任何表中具有值等于关键字的字符串列的行?

SQL 在数字第一次出现时分割字符串

sql - ms sql 查找 unicode 0

mysql - 'SET foreign_key_checks = 0' 的范围是什么?

c# - dapper c# 返回找到的行不受影响的行

python - Pandas 按所有功能分组?

python - pandas groupby 多个函数

php - 在 MYSQL PHP 中对城市、州和国家进行分组