2012-07-11 55 views
1

这是我的表MySQL查询组由获得最后一个ID

id | sender | receiver | msg 
----------------------------- 
1 | jon | jack  | buzz ... 
2 | jack | jon  | ? 
3 | adel | jon  | met me soon 
4 | jon | adel  | okay 
5 | alex | jon  | where ar u ? 
6 | jon | adel  | okay 
7 | adel | alex  | don't forget the party 
8 | jon | jack  | may i borrow ur car 
9 | alex | adel  | of course 
10 | jack | jon  | ok 
11 | jack | jon  | watch the gas 
12 | alex | jon  | i'm dying here 
13 | jon | alex  | 5 mnt .. 

,我希望得到名单乔恩的最后一封邮件与他的朋友这样

id | sender | receiver | msg 
------------------------------------------- 
13 | jon | alex  | 5 mnt .. 
11 | jack | jon  | watch the gas 
6 | jon | adel  | okay 

如何查询,得到那结果?

+0

NB,,,我只需要3记录.. – timenz 2012-07-11 08:12:50

+0

你看了我的查询? :s – 2012-07-11 08:17:54

回答

4

使用此:

SELECT * 
FROM table 
WHERE id IN (
    SELECT MAX(id) 
    FROM table 
    WHERE sender = 'jon' 
     OR receiver = 'jon' 
    GROUP BY IF(sender = "jon", receiver, sender) 
) 
ORDER BY id DESC; 

编辑:谢谢你的编辑ypercube,我还真忘了东西在这里重要的:)

+0

感谢downvote,现在再次阅读乍得的问题和道歉;-) – 2012-07-11 08:05:28

+0

我不是很明白,但这是我需要的,只需添加'ORDER BY ID DESC'进行排序。谢谢.. – timenz 2012-07-11 08:22:43

3

这将返回正是你想要的:

SELECT * FROM 
(SELECT * FROM `table` WHERE sender="jon" OR receiver="jon" ORDER BY id DESC) a 
GROUP BY IF(sender = "jon", receiver, sender) 
ORDER BY id DESC 

对不起,错误的答案第一次,我想我没仔细看这个问题。 :(

这里的测试:

http://sqlfiddle.com/#!2/e66ac/2

+0

乍得想用他的每个朋友的“每一个人”来得到jon的最后一个信息。 – 2012-07-11 08:00:19

+0

你有试过吗?,这个查询返回11行,那么我需要的是3行。不是与其他人的jon信息,而是每个'last'jon与其他人的信息,他有3个朋友,所以结果是3。 – timenz 2012-07-11 08:10:50

+0

谢谢** Zagor23 **,就像** sel **回答 – timenz 2012-07-11 08:33:52

1

试试这个::

SELECT * 
FROM table 
WHERE sender ='jon' OR receiver='jon' 
GROUP BY msg 
ORDER BY id desc 
+0

+1但他已经在这里写了3条记录并不意味着他也只要3条记录 – 2012-07-11 07:58:32

+0

@Random:谢谢,但我看了4条消息,只有3条正在显示,所以我已经通过msg分组了.. – 2012-07-11 08:00:33

+0

乍得想和他的朋友们分享每一个人的最后一封信。 – 2012-07-11 08:00:49

0

我想你需要的东西是这样的:

SELECT * FROM my_table WHERE sender="jon" OR receiver="jon" ORDER BY id DESC

2
SELECT * FROM 
(SELECT * FROM tblA WHERE sender="jon" OR receiver="jon" ORDER BY id DESC) a 
GROUP BY IF(sender = "jon", receiver, sender) 

请参考http://sqlfiddle.com/#!2/44099/1

+0

它工作得太简单了..,ty ** sel ** – timenz 2012-07-11 08:29:28

-1

这是简单的查询,你可以根据你的改变逻辑

SELECT * FROM tbl_enquiry WHERE id IN (
    SELECT Max(id) FROM tbl_enquiry WHERE date = '06/25/2015' GROUP BY cust_id 
) LIMIT 0 , 30