2014-07-07 6 views
0

J'ai une table comme suit:MySQL requête complexe besoin suggestion

id | sender  | receiver | time 
    1 | [email protected] | [email protected] | 2014-07-04 22:50:16  
    2 | [email protected] | [email protected] | 2014-07-04 22:51:20  
    3 | [email protected] | [email protected] | 2014-07-04 22:51:41  
    4 | [email protected] | [email protected] | 2014-07-04 22:52:45  
    5 | [email protected] | [email protected] | 2014-07-04 22:52:58 
    6 | [email protected] | [email protected] | 2014-07-04 22:53:33 
    7 | [email protected] | [email protected] | 2014-07-04 22:55:53 

Je veux obtenir émetteur/récepteur distinct qui a une entrée avec commande '[email protected]' par le temps desc. Ainsi, la sortie sera comme ci-dessous

id | sender  | receiver | time 
    6 | [email protected] | [email protected] | 2014-07-04 22:53:33 
    7 | [email protected] | [email protected] | 2014-07-04 22:55:53 

Je suis en train avec cela, mais ne fonctionne pas correctement

SELECT * 
FROM (
SELECT * 
FROM `message` 
ORDER BY `time` DESC 
) AS `message` 
WHERE (
message.sender = '[email protected]' 
OR message.receiver = '[email protected]' 
) 
GROUP BY message.receiver, message.sender 

S'il vous plaît me guider dans le bon sens pour atteindre mon objectif.

+0

Donc vous voulez la ligne la plus récente où sender = felix et la rangée la plus récente où le récepteur est felix? Vous pouvez le faire avec UNION. – Strawberry

Répondre

0
SELECT DISTINCT sender, receiver 
FROM tablename ORDER BY time DESC; 

Cet exemple de clause SQL DISTINCT renvoie chaque combinaison d'expéditeur et de destinataire unique. Dans ce cas, DISTINCT s'applique à chaque champ répertorié après le mot clé DISTINCT.

+0

Merci, mais cela ne donne pas ma sortie désirée – Kabir

1
DROP TABLE my_table; 

CREATE TABLE my_table 
(id INT NOT NULL PRIMARY KEY 
,sender VARCHAR(20) NOT NULL  
,receiver VARCHAR(20) NOT NULL  
,time DATETIME NOT NULL 
); 

INSERT INTO my_table VALUES 
(1,'[email protected]','[email protected]','2014-07-04 22:50:16'), 
(2,'[email protected]','[email protected]','2014-07-04 22:51:20'), 
(3,'[email protected]','[email protected]','2014-07-04 22:51:41'), 
(4,'[email protected]','[email protected]','2014-07-04 22:52:45'), 
(5,'[email protected]','[email protected]','2014-07-04 22:52:58'), 
(6,'[email protected]','[email protected]','2014-07-04 22:53:33'), 
(7,'[email protected]','[email protected]','2014-07-04 22:55:53'); 

(SELECT * FROM my_table WHERE sender = '[email protected]' ORDER BY time DESC LIMIT 1) 
UNION 
(SELECT * FROM my_table WHERE receiver = '[email protected]' ORDER BY time DESC LIMIT 1); 
+----+-------------+-------------+---------------------+ 
| id | sender  | receiver | time    | 
+----+-------------+-------------+---------------------+ 
| 7 | [email protected] | [email protected] | 2014-07-04 22:55:53 | 
| 6 | [email protected] | [email protected] | 2014-07-04 22:53:33 | 
+----+-------------+-------------+---------------------+ 
+0

Merci @ Strawberry, il ne fonctionnera que pour l'entrée ci-dessus. Que s'est-il passé lorsque '[email protected]' envoie ou reçoit de nombreux utilisateurs? – Kabir

+0

Si la question change, alors la réponse peut aussi. – Strawberry