2012-09-21 126 views
0

我有一個具有以下兩列的信息表:MySQL的選擇最近的記錄ID

ID 
SENT_DATE 

說我有以下記錄的SENT_DATE下令:

ID    SENT_DATE 

54    2012-09-21 13:25:20 
53    2012-09-21 13:25:17 
32    2012-09-21 13:25:15 
52    2012-09-21 13:25:14 
51    2012-09-21 13:25:12 
46    2012-09-21 13:25:12 
50    2012-09-21 13:25:11 

如何獲得的所有新在ID = 46(獨佔)之後發送的消息ID?查詢應返回下面的列表:

ID 

54 
53 
32 
52 
51 

注意,消息ID不單調增加加班,因爲它們是由不同的消息隊列產生。但是ID是唯一的。另外,可以同時發送兩條消息。

回答

2

您可以使用子查詢來獲得您想要的ID的sent_date,並用更大的價值回報所有行:

SELECT `id` 
FROM `messages` 
WHERE `sent_date` >= (SELECT `sent_date` FROM `messages` WHERE `id` = 46) 
AND `id` <> 46 
+1

見下面我的意見。 – scabbage

+0

這選擇了兩列,OP請求的「ID」只有 –

+0

正確無誤,已編輯。 – doublesharp

2

你可以使用子查詢的編號46的sent_date,就像這樣:

select * from message_table where sent_date > (select sent_date from message_table where id = 46) 
+1

這不起作用。它將排除消息51,因爲它與消息46具有相同的SENT_DATE。 – scabbage

+1

但是OP希望「在ID = 46之後發送消息ID」,因此排除51是正確的。這就是我所理解的。 – Nelson

+1

@ scabbage *是* OP,所以也許問題不那麼清楚...... – doublesharp

1

使用子查詢將解決此問題。

包含地處理好:

SELECT `ID` FROM `messages` WHERE `SENT_DATE` >= 
    (SELECT `SENT_DATE` FROM `messages` WHERE `ID` = 46) 

專門處理:

SELECT `ID` FROM `messages` WHERE `SENT_DATE` > 
    (SELECT `SENT_DATE` FROM `messages` WHERE `ID` = 46)