如何根据另一个列值获取max(列值)

时间:2017-11-03 17:57:39

标签: mysql sql group-by

我有一个包含以下架构和示例值的表。

enter image description here

我正在尝试编写一个查询,它会为每个用户提供连接状态的最大值(时间戳)以及断开状态。

我正在寻找的所需查询的输出模式示例是:

用户名| Connected_MAX_Timestamp | Disconnected_MAX_Timestamp

我尝试的查询是:

按用户名,socketstatus

从socketinfo组中选择用户名,socketstatus,max(时间戳)

并且相同的输出是:

enter image description here

有人可以告诉我如何实现所需的输出吗?

2 个答案:

答案 0 :(得分:2)

只需使用条件聚合:

select username,
       max(case when socketstatus = 'Connected' then timestamp end) as max_connected_timestamp,
       max(case when socketstatus = 'Disconnected' then timestamp end) as max_disconnected_timestamp,
from socketinfo
group by username;

答案 1 :(得分:1)

SELECT t1.username,
       t1.socketstatus,
       max(t1.timestamp) AS "Connected_MAX_Timestamp",
       t2.username,
       t2.socketstatus,
       max(t2.timestamp) "Disconnected_MAX_Timestamp"
FROM socketinfo t1,
     socketinfo t2
WHERE t1.socketstatus='Connected'
  AND t2.socketstatus='Disconnected'
  AND t1.username=t2.username
GROUP BY t1.username,
         t1.socketstatus,
         t2.username,
         t2.socketstatus;

如果我理解你的问题,这适用于Postgres 9.5。