我有一张表:
消息表:
id | message_text | sender_name | time
我以前也会有一个Threads
表,我会单独查询。我想完全取消Threads
表,因为它只是保留了收到的最后一条消息。
我想为每个sender_name返回1行,其中该sender_name的时间最长。我怎样才能做到这一点?
注意,我想使用SELECT *
获取所有行
例如,如果我有这些数据:
sender_name | time
bob | 0
bob | 1
bob | 30
tim | 15
tim | 18
tim | 20
julie | 7
julie | 12
julie | 25
然后从我的查询中,我想得到:
bob | 30
tim | 20
julie | 25
我还需要获得具有该名称和时间的其他列。
答案 0 :(得分:2)
SELECT sender_name, MAX(time) time
FROM table
GROUP BY sender_name
使用SELECT *可能(当然未经测试)
SELECT *
FROM table
GROUP BY sender_name
HAVING time = MAX(time)
不确定这是否可行。
答案 1 :(得分:0)
您可以在子查询中获得最大时间条目,然后为每个发件人获取该时间的所有列
select * from tableA A
inner join
(
select sender_name, max(time) as time
from tableA
group by sender_name
)T
on A.time = T.time
and A.sender_name = T.sender_name