2012-07-11 41 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