【问题标题】:根据第一个 id 用 id 更新第二个行数
【发布时间】:2022-01-22 23:44:26
【问题描述】:

我的原始数据如下:

sid id  amount
1   12  30
2   45  30
3   45  50
4   78  80
5   78  70

所需的输出如下:

sid id  amount
1   12  30
2   45  30
3   45  30
4   78  80
5   78  80

目的是获取id第一次出现的金额,并在第二次出现时更新金额 我正在尝试以下代码:

UPDATE foo AS f1
  JOIN
  ( SELECT cur.sl, cur.id,
           cur.amount AS balance 
    FROM foo AS cur
      JOIN foo AS prev
        ON prev.id = cur.id
    GROUP BY cur.tstamp
  ) AS p
  ON p.id = a.id
SET a.amount = p.amount ;

【问题讨论】:

    标签: mysql join group-by sql-update window-functions


    【解决方案1】:

    将表加入到一个查询中,该查询返回每个 id 的最小值 sid 并再次返回到自身,以便您获得具有该最小值 sid 的行:

    UPDATE tablename t1
    INNER JOIN (
      SELECT MIN(sid) sid, id
      FROM tablename
      GROUP BY id
    ) t2 ON t2.id = t1.id AND t2.sid < t1.sid
    INNER JOIN tablename t3 ON t3.sid = t2.sid
    SET t1.amount = t3.amount;
    

    请参阅demo

    对于 MySql 8.0+,如果你使用 ROW_NUMBER() 窗口函数,你只需 1 个连接即可:

    UPDATE tablename t1
    INNER JOIN (
      SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY sid) rn
      FROM tablename
    ) t2 ON t2.id = t1.id  
    SET t1.amount = t2.amount
    WHERE t2.rn = 1;
    

    请参阅demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 2015-10-24
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2019-02-19
      相关资源
      最近更新 更多