【问题标题】:MySQL delete rows based on value and after a timestamp for each customerMySQL 根据值和每个客户的时间戳删除行
【发布时间】:2016-07-31 13:05:50
【问题描述】:

我正在尝试为每个在 MySQL 中具有值 1 的客户删除时间戳之后的行。示例表:

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 id, cust_ID, MAX(timestamp) FROM table WHERE value = 1 GROUP BY cust_ID; DELETE FROM max_id WHERE id > (SELECT id FROM max_id GROUP BY cust_ID);

任何帮助将不胜感激!

【问题讨论】:

    标签: mysql


    【解决方案1】:

    我不是 100% 你想要的究竟是什么逻辑。但是,您应该可以使用join。下面将删除时间戳大于该客户最大时间戳的所有行:

    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
    

    【讨论】:

    • 感谢您的回答。然而,这只会为每个 cust_id 保留一行。任何帮助将不胜感激。
    • 现在可以了,我切换了 tt.timestamp > t.timestamp。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多