使用介于-MySQL和-MySQL之间的值填充日期

使用介于-MySQL和-MySQL之间的值填充日期,mysql,case,Mysql,Case,我有一个包含三个字段的表。我使用的是mysql workbench 6.3,我只有对数据库的读取权限 ID REVENUE DATEFIELD -1 100 2018-01-05 1 200 2018-02-03 3 0 NULL 6 700 2018-03-05 9 400 2018-06-30 10 0 NULL 11 0

我有一个包含三个字段的表。我使用的是mysql workbench 6.3,我只有对数据库的读取权限

ID    REVENUE    DATEFIELD
-1    100        2018-01-05
 1    200        2018-02-03
 3      0        NULL
 6    700        2018-03-05
 9    400        2018-06-30
10      0        NULL
11      0        NULL
12      0        NULL
当收入为0时,日期字段包含空值。 我试图用两行之间的值填充此DATEFIELD中的空值

例如:

ID REVENUE         DATEFIELD
-1     100        2018-01-05
 1     200        2018-02-03
 3       0        2018-02-05
 6     700        2018-03-05
 9     400        2018-06-30
10       0        2018-06-30
11       0        2018-06-30
12       0        2018-06-30

谢谢大家!

如评论中所述

SELECT 
  ID, 
  REVENUE, 
  CASE WHEN DATEFIELD IS NULL 
    THEN @d := @d + INTERVAL 1 DAY 
    ELSE @d := DATEFIELD 
  END as DATEFIELD
FROM yourtable t, (SELECT @d := CURRENT_DATE - INTERVAL 999 DAY) r
ORDER BY ID

@d在几天前初始化为999。如果datefield列为null,则取@d的最后一个值并向其添加一天,然后返回它,否则取datevalue的行值并存储它in@d并返回它

欢迎使用堆栈溢出!StackOverflow不是免费的编码服务。所以我希望你能。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅并采用:使用用户定义变量@current_date,将其设置为每行的日期,并在日期为空时递增。为什么结果中的最后一个日期是2018-06-30而不是2018-07-01?为什么第3行是2018-02-05而不是2018-02-04?是否可能是2018-02-03和2018-03-05之间的任何日期?@Barmar发表了很好的评论,请回答。。还提供您的MySQL,您可以通过选择版本了解它。。这个问题在MySQL 8.0+中最容易解决,因为它支持滞后和超前功能。。此外,我发现订单有问题,因为您没有提供一个列,我们可以通过自动递增的列或更新当前时间戳的datetime/timestamp列来识别订单。您应该使用order by ID,否则,顺序是不可预测的。我尝试使用datefield作为变量:选择@d:=datefield r,但当我这样做时,我得到一个错误:“字段列表”0.047中的未知列“datefield”sec@MelanieWill子查询只是给变量一个默认的初始值,它不从任何表中选择,所以它不能引用列名。你从主查询中的表中分配给它。我总是感到困惑,为什么在给某人一些工作代码后,他们更改代码使其停止工作,然后他们返回,呃,我更改了这个,现在它不工作了。