我有一个数据表-一个大的,有用电量值。
有时,由于出现故障,该值小于上一条记录,这会导致处理时出现问题。

monday    143 kWh
tuesday   140 kWh *glitch*
wednesday 150 kWh

我想把桌子弄得单调些。我想知道是否有一个sql查询将每个glitched值设置为上一个最大值。
如果没有php,这是可能的吗?
表格格式如下(稍微简化一点):
CREATE TABLE IF NOT EXISTS `history` (
  `day` int(11) NOT NULL,
  `value` float NOT NULL
)

我知道如何在php中,一行行一行,但如果有一个更干净的sql专用解决方案,那将是极好的!

最佳答案

你希望序列是“单调的”。“单调”意味着无聊。
如果有大量数据,那么最有效的方法是使用变量:

select h.day,
       (@max := greatest(@max, h.value)
from history h cross join
     (select @max := -1) params
order by h.day;

如果您确实想更新这些值,那么您可以执行基本相同的操作:
update history h
    set value = (@max := greatest(coalesce(@max + 0, 0), h.value)
    order by h.day;

注意,在本例中,@max默认为字符串变量。在order by查询中不能同时有joinupdate。所以,要么在update之前定义变量,要么进行一点字符串到数字的转换。

关于php - SQL查询使值单调?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30487215/

10-11 07:23