MySQL - 将特定行设为 NULL 或 max 值,而不仅仅是列

标签 mysql sql database

我正在搜索如何进行 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/

相关文章:

mysql - 如何将 MySQL 选择结果移动到物理文件中?

MySQL 使用连接排除 id

mysql - 多重连接和乘法

php - Docker 没有 MySQL 连接到 Nginx

MySQL 每月获取累计客户交易(不是 SQL 交易)

java - 将 json 数据发送到 db 并在 listview 中显示抛出 "null pointer exception"

php - 当从数据库获取多条记录时,Mysql子查询返回错误

mysql - Adventure Works 2014 SQL 查询

mysql - 如何在不同的外键上自动递增?

database - 无法使用 Eclipse Studio 连接到 SAP HANA Express 数据库