2014-09-22 55 views
1

我有这样一个表:的SQLite,选择邮件的邮件

信息表:

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

这是一个基本的'组by'查询。如果你想有效地使用它,你应该学习SQL。 – 2014-09-22 18:41:44

+0

'group by'不起作用,因为它返回最后插入的行(如果我没有弄错)。我尝试将它与'order by'耦合起来,但它仍然返回最后插入的行,而不是具有最大'time'的行。 – Jakar 2014-09-22 18:44:03

回答

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) 

不知道这是否会工作,虽然。

+0

我更新了我的问题,但我想使用'SELECT *'。 – Jakar 2014-09-22 18:45:46

+0

如果你有几列,添加列怎么办? – 2014-09-22 18:48:52

+0

这是一个选项,如果我必须这样做,但我不想列出查询中的列 – Jakar 2014-09-22 19:02:28

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