【问题标题】:how to replace the zero values with the previous non-zero value in MySQL?如何用 MySQL 中以前的非零值替换零值?
【发布时间】:2020-04-05 12:50:11
【问题描述】:

免责声明:这不是重复的问题。发帖前我有研究

红圈中的值应该是“2”值,因为之前的非零值是数字2。如何在mysql更新查询中做到这一点?如您所见,还有其他行具有相同的零值,需要具有先前的非零值。

【问题讨论】:

  • 您必须为此使用存储过程。您必须在存储过程中编写条件。
  • @PrabhjotSinghKainth:这与存储过程无关。
  • 我们可以不更新并将val1设置为2val1 = 0吗?
  • 必须有一种方法可以在不使用存储过程的情况下做到这一点
  • @juergend 为什么不是?由于它是基于条件的,我们可以使用存储过程。这不是唯一的方法。

标签: mysql sql database select subquery


【解决方案1】:

如果您只想选择正确的值,请使用

  select pk, val1, @previous as previous_v, @previous := val1
  from your_table
  cross join (select @previous := 0) p
  order by pk

如果您还想更新表格,请使用

update your_table t
join
(
  select pk, val1, @previous as previous_v, @previous := val1
  from your_table
  cross join (select @previous := 0) p
  order by pk
) tmp on tmp.pk = t.pk
set t.val1 = previous_v
where t.val1 = 0

SQLFiddle demo

【讨论】:

    【解决方案2】:

    您可以使用内联查询:

    select 
        pk,
        case when val1 = 0 
            then (select val1 from mytable t1 where t1.pk < t.pk and t1.val1 != 0 order by pk desc limit 1)
            else val1
        end val1,
        val2,
        val3,
        received_date
    from mytable t
    
    

    【讨论】:

      猜你喜欢
      • 2015-08-24
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多