2013-04-26 75 views
0

,我有以下结果从查询MySQL的:有两个不同的列查询不同的列日期

SELECT DISTINCT user_id, 
       IF(ra.status = 1, created_datetime, 'No record') AS ACTIVATED, 
       IF(ra.status = 0, created_datetime, 'No record') AS DE_ACTIVATED 
FROM accounts ra 
WHERE user_id IN (12345678); 

+----------+---------------------+---------------------+ 
| user_id | ACTIVATED   | DE_ACTIVATED  | 
+----------+---------------------+---------------------+ 
| 12345678 | No record   | 2013-04-28 02:32:36 | 
| 12345678 | 2013-03-28 02:32:36 | No record   | 
+----------+---------------------+---------------------+ 

我想只有1行的记录,结合激活和去激活。基本上,这样做。

+----------+---------------------+---------------------+ 
| user_id | ACTIVATED   | DE_ACTIVATED  | 
+----------+---------------------+---------------------+ 
| 12345678 | 2013-03-28 02:32:36 | 2013-04-28 02:32:36 | 
+----------+---------------------+---------------------+ 

任何帮助是非常感谢,因为我建立我的查询忍者技能。

问候

+0

这两者之间有什么关系?为什么不只是获得两列的MAX? – Kermit 2013-04-26 02:47:07

回答

1

以这两个条件的MAX,但要“假”条件评估为null。然后把它包在COALESCE所以如果calcualted MAX为null,它会与no record替代:

SELECT user_id, 
    COALESCE(MAX(IF(ra.status = 1, created_datetime, null)), 'No record') AS Activated, 
    COALESCE(MAX(IF(ra.status = 0, created_datetime, null)), 'No record') AS Deactivated 
FROM accounts ra 
WHERE user_id IN (12345678) 

如果你会查询一个以上的用户,这添加到末尾:

GROUP BY user_id 
+0

太棒了!谢谢 – 2013-04-26 03:35:43