【发布时间】:2020-04-06 05:42:00
【问题描述】:
当我使用 if 条件中的变量 @prevValue 从派生表(映射表)执行左连接以存储先前的值时,我得到不同的结果
这是表格
表格1 日期值 2020-03-02 00:00:00 0 2020-03-02 07:00:00 1 2020-03-02 12:00:00 0 表_2 2020-03-02 00:00:00 0 2020-03-02 07:00:00 1 2020-03-02 12:00:00 1 2020-03-02 14:00:00 0 映射表 日期 2020-03-02 00:00:00 2020-03-02 01:00:00 2020-03-02 02:00:00 2020-03-02 03:00:00 ...这是我的查询(我什至添加了计数器来检查 mysql 如何加入表)
SET @prevValue=0;
SELECT DATE_FORMAT(P.date,'%Y-%m-%d %H:%i:%s') AS `date`,
IF(D.date IS NULL ,@prevValue, @prevValue:=D.value) AS `dataValue`
FROM (SELECT `T`.`date` FROM `Mapping_table` AS `T`
WHERE (date >= '2020-03-02 00:00:00') AND (date <= '2020-03-02 23:59:00')) AS `P`
LEFT JOIN `Table_1` AS `D` ON D.date=P.date ORDER BY `P`.`date` ASC;
结果如下:
日期值 -------------------------- “2020-03-02 00:00:00” “0” "2020-03-02 00:01:00" \N "2020-03-02 00:02:00" \N "2020-03-02 00:03:00" \N "2020-03-02 00:04:00" \N "2020-03-02 00:05:00" \N查询 Table_2(我刚刚将查询替换为 Table_2)产生以下结果:
日期值 -------------------------- “2020-03-02 00:00:00” “0” “2020-03-02 00:01:00” “0” “2020-03-02 00:02:00” “0” “2020-03-02 00:03:00” “0” “2020-03-02 00:04:00” “0” “2020-03-02 00:05:00” “0”我想要的结果是最后一个。我希望 Table_1 的左连接应该返回与 Table_2 相同的结果?你们知道我应该在查询中更改什么或解释为什么会发生这种情况吗?
使用的mysql版本5.7
【问题讨论】:
-
结果在我看来是一样的db-fiddle.com/f/6GdJFZG4RCUP57twWFcbfR/1
-
如果您使用用户定义的变量,则查询必须是单源的,并按唯一表达式排序。
标签: mysql sql database if-statement