2013-10-30 79 views
1

選擇在MySQL和順序唯一值我有以下的列和行如何通過另一場

sender  receiver timestamp 
1   176  305 
176   1   503 
1   116  2011 
45   1   106 
1   176  309 

好的數據庫。到現在爲止還挺好。關鍵是,我很想來顯示所有的數據一次,並通過時間戳爲了它的,所以我會得到這樣的:

sender/receiver  timestamp 
116     2011 
176     503 
45     109 

這意味着我將只得到時間戳的最高值,即使發送者/接收者多出一次。

我真的希望你能理解我的問題。

+0

在哪裏發送/接收器1的輸出? – gvee

回答

2
SELECT CASE WHEN Sender = 1 THEN Receiver ELSE Sender END `sender/receiver`, 
     MAX(timestamp) time_stamp 
FROM tableName 
WHERE 1 IN (Sender, Receiver) 
GROUP BY CASE WHEN Sender = 1 THEN Receiver ELSE Sender END 
ORDER BY time_stamp DESC 

CASE語句採用Receiver的值是Sender = 1否則SenderMAX()的使用取得了時間戳的最大價值。

+0

爲什麼我們需要WHERE 1 IN(Sender,Receiver)..如果我們在發送者或接收者中總是有1個? – Peeyush

+0

@Peeyush如果你在發送者或接收者中總是有1個,你不需要'WHERE'。但在這個問題被編輯之前。 OP說明他想過濾記錄中任何一列中存在「1」的記錄。 –

+1

非常感謝!你救了我的一天:) – Emil

0

另一種選擇:

SELECT sender_receiver 
    , Max(timestamp) As max_timestamp 
FROM (
     SELECT sender As sender_receiver 
      , timestamp 
     FROM your_table 
     WHERE sender <> 1 

     UNION ALL 

     SELECT receiver As sender_receiver 
      , timestamp 
     FROM your_table 
     WHERE receiver <> 1 
     ) As x 
ORDER 
    BY max_timestamp