当前位置: 首页 > 知识库问答 >
问题:

需要用以前的值替换空值

刘和正
2023-03-14

有必要连接表,但这样就不是空值,而是最后一个已知值​​​被放下并相乘

我有两个桌子“oper”tender“curs”

  1. 操作-有2列日期(日期),和(int)
  2. curs-有2列“date”(date),“cur”(int)[1]:https://i.stack.imgur.com/og8qy.png

我运行代码:

    SELECT  oper.date AS "Date", 
        oper.sum AS "SUM, USD",
        curs.cur AS "USD/RUB", 
        round(oper.sum * curs.cur,2) AS "SUM, RUB" 
FROM operations
LEFT JOIN currency ON oper.date = cur.date

我得到:

date       | sum.USD | USD/RUB | SUM.RUB
01.01.2020 | 3464    | 71,21   | 246671,44
02.01.2020 | 1091    | 67,99   | 74177,09
03.01.2020 | 2991    | 69,81   | 208801,71
04.01.2020 | 1919    | NULL    | NULL
05.01.2020 | 1560    | NULL    | NULL
06.01.2020 | 2479    | 70,5    | 174769,5
07.01.2020 | 2521    | NULL    | NULL
08.01.2020 | 3382    | NULL    | NULL
09.01.2020 | 3112    | 70,21   | 218493,52
10.01.2020 | 1632    | 69,9    | 114076,8

我想获取(最好是在一个使用COALESCE的请求中):

date       | sum.USD | USD/RUB | SUM.RUB
01.01.2020 | 3464    | 71,21   | 246671,44
02.01.2020 | 1091    | 67,99   | 74177,09
03.01.2020 | 2991    | 69,81   | 208801,71
04.01.2020 | 1919    | 69,81   | 133965,39
05.01.2020 | 1560    | 69,81   | 108903,6
06.01.2020 | 2479    | 70,5    | 174769,5
07.01.2020 | 2521    | 70,5    | 177730,5
08.01.2020 | 3382    | 70,5    | 238431
09.01.2020 | 3112    | 70,21   | 218493,52
10.01.2020 | 1632    | 69,9    | 114076,8

共有1个答案

鄢子平
2023-03-14

在MySQL8+上,我们可以在这里使用last_value分析函数:

SELECT
    oper.date AS "Date", 
    oper.sum AS "SUM, USD",
    LAST_VALUE(curs.cur IGNORE NULLS) OVER (ORDER BY oper.date) AS "USD/RUB", 
    ROUND(oper.sum *
          LAST_VALUE(curs.cur IGNORE NULLS) OVER (ORDER BY oper.date), 2) AS "SUM, RUB" 
FROM operations oper
LEFT JOIN currency curs
    ON oper.rep_date = curs.date;

在MySQL的早期版本上,我们可以尝试使用相关子查询来填补空白:

SELECT
    oper.date AS "Date", 
    oper.sum AS "SUM, USD",
    (SELECT curs.cur FROM currency curs
     WHERE curs.date <= oper.date AND curs.cur IS NOT NULL
     ORDER BY curs.date DESC LIMIT 1) "USD/RUB", 
    ROUND(oper.sum *
          (SELECT curs.cur FROM currency curs
           WHERE curs.date <= oper.date AND curs.cur IS NOT NULL
           ORDER BY curs.date DESC LIMIT 1), 2) AS "SUM, RUB" 
FROM operations oper
ORDER BY date;
 类似资料:
  • 我正在尝试编写一个批处理脚本来更改以下两个名为example1的JSON的“tags”键的值。json和示例2。json。 输入示例1。json 输入example2.json 预期的输出是两个同名的JSON,但标记值现在已更改。 Example1.json: 输入标记值-example1(即json文件名) 输出标签值-tags1(根据要求) Example2.json 输入标记值-exampl

  • 我想我需要编辑临时表来将空单元格转换为空单元格。我可以从SSIS包中执行此操作吗?或者是否有可以使用的表设置? 谢谢你。

  • 问题内容: 我需要从OracleSQL中的employees表中显示Employee及其佣金金额,但是条件是如果它遇到值,我需要打印_“ No Commission”_ 。 在第一部分中,我写道: 但是我无法获得如何用 “ No Commission” 代替价值观。 问题答案: 您可以使用表达式: 或: 或: PS如果不是数据类型,则也应使用或。

  • 我正在运行一个AWS Glue作业,使用从Glue自动生成的PySpark脚本,将S3上的管道分隔文件加载到RDS Postgres实例中。 最初,它抱怨某些列中的空值: http://spark.apache.org/docs/latest/api/python/pyspark.sql.sql.html#pyspark.sql.dataframe.fillna 现在,当我运行作业时,它会抛出以下

  • 问题内容: 我想在包含空格(任意数量)的Pandas数据框中找到所有值,并用NaN替换这些值。 有什么想法可以改善吗? 基本上我想把这个: 变成这个: 我已经用下面的代码做到了,但是这很丑。这不是Pythonic,而且我敢肯定,这也不是最有效的熊猫使用方式。我遍历每一列,并对通过应用对每个值进行正则表达式搜索的函数生成的列掩码进行布尔替换,在空白处进行匹配。 通过仅迭代可能包含空字符串的字段,可以

  • 我想找到熊猫数据框中包含空白(任意数量)的所有值,并用NaN替换这些值。 有什么想法可以改进吗? 基本上,我想把这个转变为: 为此: 我已经设法做到了下面的代码,但人是丑陋的。这不是蟒蛇,我肯定这也不是对熊猫最有效的利用。我循环遍历每一列,并对应用一个函数生成的列掩码进行布尔替换,该函数对每个值进行正则表达式搜索,并在空格上进行匹配。 只需遍历可能包含空字符串的字段,即可对其进行一点优化: 但这算

  • 问题内容: 我需要用%符号替换字符串中的空格,但是我遇到了一些问题,我尝试的是: 但这给我替换功能一个错误。 然后: 但是它仍然给我替换函数错误。 我尝试使用unicode符号: 但是它仍然会给出错误。 有一个简单的方法吗? 问题答案: 是您想要的方法。 更换 与 我建议您在Java中使用进行编码。

  • 请考虑下面的代码: 将给出1,因为HashSet不允许重复,所以只存储一个元素。 我想知道如果我们添加了重复的元素,那么它是替换了前面的元素,还是根本没有添加它? 另外,对于相同的情况,使用会发生什么?