2012-09-21 127 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)