2013-10-30 47 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