2016-07-31 26 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 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

努力實現:

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以下 '子查詢返回多行':

CREATE VIEW max_id AS SELECT idcust_ID,MAX(timestamp)FROM table WHERE value = 1 GROUP BY cust_ID; (選擇idmax_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一行。任何幫助,將不勝感激。 –

+0

它現在可以工作,我切換了tt.timestamp> t.timestamp。謝謝! –