【问题标题】:sql update max(date) group bysql update max(date) 分组依据
【发布时间】:2022-12-13 19:00:05
【问题描述】:
  • 原始数据
no group date value flag
1 a 2022-10-13 old y
2 a 2022-10-15 new y
3 b 2022-01-01 old n
4 b 2022-01-03 new n
  • 第一步。插入 1 号原始
  • 第二步。使用 no2 raw 修改日期值

我想使用 no2 raw 更新最新日期 no1 raw 条件是where `flag` = "y"

  • 最终的sql表
no group date value flag
1 a 2022-10-15 old y
3 b 2022-01-01 old n

可能吗?

+) 我逐行插入/更新原始数据。

【问题讨论】:

  • 最终的sql表怎么只有2行?
  • 插入 row1, row3 / 不插入 row2 row4
  • 不是你,原始数据是一个表,最终表是另一个?
  • 模式是什么,获取每个组的最小 ID 和每个组的最大日期?
  • 如果你想要一个 python 解决方案,你应该标记为 python 并发布你到目前为止的内容。顺便说一句,拆分行?那是什么?您的原始数据到底是什么样子的?它来自哪里?

标签: mysql sql group-by sql-update


【解决方案1】:

不完全清楚,但我希望下面的答案能给你一个提示,如果不是解决方案的话。

select  no,
       `group`,
        case when flag='Y' then mx_dt else `date` end as new_date,
        value,
        flag
from (    select no,
                 `group`,
                  value,
                  `date`,
                  flag ,
                  row_number() over(partition by `group` order by `date` asc ) as rn,
                  max(`date`) over (partition by `group`,(case when flag  <> 'Y' then `date`  end)   ) mx_dt
          from raw_data
    ) as tbl
where rn=1;

如果标志=Y,上面的代码将选择每组的最大(日期),否则它将采用每行的日期。

https://dbfiddle.uk/JhRUti2h

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2011-09-12
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多