我正在搜索如何进行 2-3 列的选择,并将其中一列参数为 NULL 的结果作为结果,否则如果用户名没有 NULL,则采用最大日期。
我的问题是,在结果中,ipaddr 来自最大停止时间行,如果没有 NULL 行,我会正确获取 ipaddr
对我来说很重要,因为可以按用户搜索。
让我们看看我的数据库格式:
username stoptime ipaddr
peter 2012-10-16 00:00:00 1.1.1.1
obama 2014-03-12 00:00:00 1.1.1.2
peter 2013-10-16 00:00:00 1.1.1.3
obama NULL 1.1.1.4
当我启动时:
SELECT username,case when MAX(stoptime is NULL)=0 then max(stoptime) end as stoptime,ipaddr
FROM tb
WHERE username LIKE "%OBAM%" group by username;
在此示例中,我希望从查询中获取以下结果:
obama NULL 1.1.1.4
相反,我采用这个:
obama NULL 1.1.1.2
谢谢!
最佳答案
您错误地使用了group by
。特别是,select
中的列不在group by
中。 MySQL 特别不鼓励这样做(请参阅 here )。
做你想做的事情的最简单方法是:
SELECT username,
(case when max(stoptime is null) = 0
then max(stoptime)
end) as stoptime,
substring_index(group_concat(ipaddr order by (stoptime is null) desc, stoptime desc), ',', 1) as ipaddr
FROM tb
WHERE username LIKE "%OBAM%"
group by username;
但是,这种方法有一些限制——例如用于连接的中间字符串的大小。还有其他方法,但这在很多情况下都有效。
关于MySQL - 将特定行设为 NULL 或 max 值,而不仅仅是列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32403445/