2016-07-31 15 views
0

MySQLで値1を持つ各顧客のタイムスタンプの後に行を削除しようとしています。MySQLは、値に基づいて、各顧客のタイムスタンプに基づいて行を削除します。

id | timestamp | cust_ID | value 899900 | 2016-04-11 12:00:00 | 500219 | 0 899901 | 2016-04-12 16:00:00 | 500219 | 0 899902 | 2016-04-14 11:00:00 | 500219 | 1 899903 | 2016-04-15 12:00:00 | 500219 | 1 909901 | 2016-04-12 16:00:00 | 500230 | 0 909902 | 2016-04-14 11:00:00 | 500230 | 1 909903 | 2016-04-15 12:00:00 | 500230 | 1 939905 | 2016-05-02 19:00:00 | 500240 | 0

をこれまでのところ、私はエラー1242をスローし、次のを持っている 'サブクエリが複数の行を返す':AS

CREATE VIEW max_idを例テーブル:達成しようとし

id | timestamp | cust_ID | value 899900 | 2016-04-11 12:00:00 | 500219 | 0 899901 | 2016-04-12 16:00:00 | 500219 | 0 899902 | 2016-04-14 11:00:00 | 500219 | 1 899903 | 2016-04-15 12:00:00 | 500219 | 1 899904 | 2016-04-23 09:00:00 | 500219 | 0 899905 | 2016-05-02 19:00:00 | 500219 | 0 909901 | 2016-04-12 16:00:00 | 500230 | 0 909902 | 2016-04-14 11:00:00 | 500230 | 1 909903 | 2016-04-15 12:00:00 | 500230 | 1 909904 | 2016-04-23 09:00:00 | 500230 | 0 909905 | 2016-05-02 19:00:00 | 500230 | 0 939905 | 2016-05-02 19:00:00 | 500240 | 0

SELECT id,cust_ID、MAX(timestamp)FROM table WHERE value = 1 GROUP BY cust_ID; max_id WHERE id>(SELECT id FROM max_id GROUP BY cust_ID)から削除します。

ご協力いただければ幸いです!

答えて

0

私はあなたが望む正確なロジックが100%ではありません。しかし、あなたはjoinを使用できるはずです。次の例では、タイムスタンプが最大タイムスタンプより大きい、その顧客の「1」を持つ顧客のすべての行が削除されます。

delete t 
    from table t join 
     (select t.cust_Id, max(timestamp) as maxts 
      from table t 
      group by t.cust_id 
     ) tt 
     on t.cust_id = tt.cust_id and tt.timestamp > t.timestamp 
+0

ありがとうございます。ただし、これはcust_idごとに1行しか保持しません。どんな助けもありがとう。 –

+0

これで動作し、tt.timestamp> t.timestampに切り替えました。ありがとう! –

関連する問題