0

次の 2 つの列を持つメッセージ テーブルがあります。

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 つのメッセージを送信することもできます。

4

3 に答える 3

2

サブクエリを使用して、sent_date必要な ID を取得し、より大きな値を持つすべての行を返すことができます。

SELECT `id`
FROM `messages` 
WHERE `sent_date` >= (SELECT `sent_date` FROM `messages` WHERE `id` = 46)
AND `id` <> 46
于 2012-09-21T20:50:13.333 に答える
2

次のように、id 46 の sent_date のサブセレクトを使用して行うことができます。

select * from message_table where sent_date > (select sent_date from message_table where id = 46)
于 2012-09-21T20:50:22.727 に答える
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)
于 2012-09-21T20:50:25.720 に答える