Mysql:如果上一行与当前行相同,则更新当前值

时间:2015-10-19 07:22:46

标签: mysql sql

如果前一行与当前行相同,如何更新当前行值。

例如: enter image description here

thentnt行是68,前一行也是68 ..我想更新当前行变为68-20这是48。

同样适用于98-20 = 78。

以便更正后的数据如下所示: enter image description here

我有超过1000条这样的记录,无法手动逐一更新记录。

update table1 set DIH_QTY_BALANCE=DIH_QTY_BALANCE-DIH_REORDER_QTY
  

如何将前一行与当前子句的当前内容相同?

这是Schema +数据: http://pastebin.com/T1tYDT6Y

对于sqlfiddle而言太大了。

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

据我所知,MySQL在更新语句中从同一个表中进行选择存在问题。这就是你必须要做的,因为为了更新记录,你必须从同一个表中选择它以前的记录。

因此,创建一个临时表,给它行号,然后通过自联接从中选择,以将每个记录与其先前的记录进行比较。

var arr = new string[7] {
    "--start-maximized", "--ignore-certificate-errors", "--disable-popup-blocking", "--disable-default-apps", "--auto-launch-at-startup", "--always-authorize-plugins", "--user-agent= " + FrameGlobals.userAgentValue
};
chromeCapabilities.AddArguments(arr);

WebDriverObj = new ChromeDriver(chromeCapabilities);

答案 1 :(得分:0)

可能是这样的

SELECT DIH_QTY_BALANCE,
       (SELECT DIH_QTY_BALANCE FROM example e2
        WHERE e2.DIHISTORYID < e1.DIHISTORYID
        ORDER BY DIHISTORYID DESC LIMIT 1) as previous_value,
       (SELECT value FROM example e3
        WHERE e3.DIHISTORYID > e1.DIHISTORYID 
        ORDER BY DIHISTORYID ASC LIMIT 1) as next_value
FROM example e1