我有一个包含以下架构和示例值的表。
我正在尝试编写一个查询,它会为每个用户提供连接状态的最大值(时间戳)以及断开状态。
我正在寻找的所需查询的输出模式示例是:
用户名| Connected_MAX_Timestamp | Disconnected_MAX_Timestamp
我尝试的查询是:
按用户名,socketstatus
从socketinfo组中选择用户名,socketstatus,max(时间戳)并且相同的输出是:
有人可以告诉我如何实现所需的输出吗?
答案 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。