【问题标题】:Replace NULL with previous date next 7 rows in MYSQL将 NULL 替换为 MYSQL 中下 7 行的上一个日期
【发布时间】:2020-01-14 07:09:41
【问题描述】:

我有一个带有date 列和system_week_end 日期列的 MySQL。 system_week_end列有一两周缺失值的情况。

注意

  • system_week_end 可以是一周中的任何一天。我无法结束标准周末功能
  • system_week_end 是按company 列过滤的子集,每个公司都设置了system_week_end 日期。
  • date包含每天,没有缺失值

以下是数据示例:

date            system_week_end
2020-01-05      2020-01-05
2020-01-04      <null>
2020-01-03      <null>
2020-01-02      <null>
2020-01-01      <null>
2019-12-31      <null>
2019-12-30      <null>
2019-12-29      <null>
2019-12-28      <null>
2019-12-27      <null>
2019-12-26      <null>
2019-12-25      <null>
2019-12-24      <null>
2019-12-23      <null>
2019-12-22      2019-12-22
2019-12-21      <null>
2019-12-20      <null>
2019-12-19      <null>
2019-12-18      <null>
2019-12-17      <null>
2019-12-16      <null>
2019-12-15      2019-12-15

我将如何构造一个 MySQL 查询来为 system_week_end 列填充 null?

例如:

2020-01-05      2020-01-05
2020-01-04      2020-01-05
2020-01-03      2020-01-05
2020-01-02      2020-01-05
2020-01-01      2020-01-05
2019-12-31      2020-01-05
2019-12-30      2020-01-05
2019-12-29      2019-12-29
2019-12-28      2019-12-29
2019-12-27      2019-12-29
2019-12-26      2019-12-29
2019-12-25      2019-12-29
2019-12-24      2019-12-29
2019-12-23      2019-12-29
2019-12-22      2019-12-22
2019-12-21      2019-12-22
2019-12-20      2019-12-22
2019-12-19      2019-12-22
2019-12-18      2019-12-22
2019-12-17      2019-12-22
2019-12-16      2019-12-22
2019-12-15      2019-12-15

【问题讨论】:

  • 抱歉,不清楚您在问什么。也许在你做任何事情之后添加一个你想要对这些行发生的事情的例子
  • 找到给定日期的周末日期并不难。谷歌会帮助你。
  • system_week_end 可以是任何工作日,因此我无法结束 std 周末功能。
  • 那么对于对应system_week_end的每个日期都为NULL,你想要它的周末日期吗?
  • @mitkosoft 正确。 system_weekend_date 并不总是日历周末。此数据是使用 where company = ... 的子集

标签: mysql sql date


【解决方案1】:

这应该用相应的周末日期更新缺失的日期:

UPDATE dateTable 
SET system_week_end = DATE_ADD(`date`, INTERVAL 6 - WEEKDAY(`date`) DAY)
WHERE `system_week_end` is NULL

【讨论】:

  • 为什么是'-1'?然后星期六返回。另外,两个 DATE_ADD 的原因是什么? DATE_ADD(@d, INTERVAL 6 - WEEKDAY(@d) DAY) 应该可以解决问题。
  • 如果system_week_end 是星期三会怎样?我知道填写接下来的 6 行,然后添加一周重复。
  • @Adam,从您最初的问题来看,不清楚取决于system_week_end 值的行为应该是什么。如果system_week_end date/day 存在依赖关系,尤其是示例部分,您能否更新描述和所需结果?
  • @Adam:这个答案does what you want
猜你喜欢
  • 2018-12-28
  • 2020-01-12
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多