2017-08-21 12 views
0

から早く1週間よりもイベントの時間を持つ行を選択:MySQLの:私は、次のデータを含むテーブルを持っている特定のEVENT_TIME

ID  Event_time    Event_type 
    0  2016-05-11 17:26:03.0   1 
    0  2017-06-13 19:29:03.0   2 
    0  2017-06-13 13:56:05.0   3 
    0  2016-05-13 17:20:37.0   1 
    1  2016-09-20 16:20:03.0   0 
    1  2016-11-11 20:12:03.0   2 
    2  2016-11-15 17:26:03.0   1 
    2  2016-12-02 15:06:00.0   2 
    2  2016-12-02 15:00:03.0   0 

各IDがEvent_type = 2を持っています。今度は、それぞれのデータをEvent_type = 2から別々にIDごとに1週間以内に選択したいと考えています。

私はこのクエリを試してみました:

SELECT*FROM my_table WHERE EVENT_TIME IN (SELECT DATE_SUB(EVENT_TIME, INTERVAL 7 DAY) FROM my_table where EVENT_TYPE='2') 

が、それは私にあるべき所望の出力、与えるものではありません。

ID  Event_time    Event_type 
0  2017-06-13 19:29:03.0   2 
0  2017-06-13 13:56:05.0   3 
1  2016-11-11 20:12:03.0   2 
2  2016-12-02 15:06:00.0   2 
2  2016-12-02 15:00:03.0   0 

を、私は何かがDATE_SUB機能が正しく動作しないと思い、しかし、私はそれを修正する方法を知りません。

EDITED: Event_type = 2の日付は出力する必要があります。

+0

なぜEVENT_TYPEでしょうか? – Strawberry

+0

申し訳ありませんが、私はそれを誤って書いていませんでした。event_type = 2の日付が出力になければなりません。ありがとう@Strawberry – JeffTheKiller

答えて

1

あなたは「個別IDごと」に言及、まだあなたのクエリでそれをチェックしません。

はこのようにそれを試してみてください:2が結果に表示される=

SELECT * 
FROM my_table WHERE EVENT_TIME > (
    SELECT DATE_SUB(MAX(EVENT_TIME), INTERVAL 7 DAY) 
    FROM my_table mt /*note that I used a different alias here for the table...*/ 
    WHERE EVENT_TYPE='2' 
     AND mt.ID = my_table.ID /*...so that I can distinguish between the ID in the subquery and the outer query*/ 
) 
+0

それは大丈夫だが、私にエラーが表示されます: 'where句'の 'my​​_table.ID'不明な列。何が間違っていると思いますか? – JeffTheKiller

+0

my_tableという名前のテーブルがないか、カラムIDがないかのいずれかです。私はちょうど質問のあなたの質問でそれらを使用したような名前を取った。もちろん、実際の名前ではない場合は、名前の変更も必要です。 – fancyPants

+0

http://sqlfiddle.com/#!9/bba8f/1しかし、これによると、あなたのクエリは出力を与えません。 – JeffTheKiller

0

IN節は、日付が指定した選択と正確に一致するようにします。

試してみてください。

SELECT*FROM my_table WHERE EVENT_TIME < DATE_SUB(EVENT_TIME, INTERVAL 7 DAY) AND EVENT_TYPE='2' 
+0

残念ながら、それは私の構文エラーを与える:( – JeffTheKiller

+0

申し訳ありませんが私は間違ったコピーの貼り付けを行った:) –

関連する問題