2012-03-05 4 views
2

すべてのエントリにタイムスタンプとイベントを入力する時刻ログテーブルがあります。条件の前にMySQL行+ 1をフェッチする

今、特定のイベントの後にあるすべての行とその行の前に(ORDER BY time_stamp)そのイベントを選択したいとします。

私はこれを複数のクエリで簡単に達成できますが、1つのクエリでは可能ですか?

はあまり良くない中で、複数のクエリ

SELECT time 
FROM table 
WHERE event LIKE '%event_to_fint%' 

SELECT event 
FROM table 
WHERE time<'time from last query' 
LIMIT 1 
ORDER BY 
     time DESC 
+0

あなたテーブルから** –

+0

SELECT時間ご**複数のクエリを投稿できますからlast que 'LIMIT 1 ORDER BY時間DESC
と組み合わせて – Seb

答えて

0

一つの選択肢は

  • 選択するために定期的な選択を使用することですtimeレコードが必要です。
  • この結果を選択すると、最大timeが検索されます。この最大値は、timeが通常のselectの最小値timeより小さい値です。

WHEREテーブルFROM '%のevent_to_fintの%'
LIKEイベント+ SELECTは、イベント時間<「時間SQLステートメント

SELECT time 
FROM table 
WHERE event LIKE '%event_to_fint%' 
UNION ALL 
SELECT MAX(time) 
FROM table 
WHERE time < (
       SELECT MIN(time) 
       FROM table 
       WHERE event LIKE '%event_to_fint%' 
       ) 
0

にこのソリューションを使用しますが、動作します:

SELECT * 
FROM table 
WHERE <condition_A> 
ORDER BY <condition_B> 
LIMIT (SELECT COUNT(*) 
     FROM table 
     WHERE <condition_A> 
     )+1 
+0

いいえ、動作しません。あなたはLIMIT節で計算をすることは許されません。 LIMIT 1 + 1でもエラーになります。少なくともMySQL 5.1では。あれは。 – fancyPants

+0

私はこれをsqliteで実際に試してみます。私はそれがmysql上で動作すると思った.. –