首页 > 解决方案 > SQL:如何在每个 ID 中查询 max datetime 中的值并用前一个值填充空值

问题描述

我的表中有数据。

在此处输入图像描述

我需要每天每个 ID 的当前余额(以前的可用值)。

如何编写这样的 SQL 查询以获得以下输出。 在此处输入图像描述

标签: sqlpresto

解决方案


您的问题有点令人困惑,因为这两个数据集看起来它们具有大约相同的行,但不同。

获得所需内容的一种方法是使用 across join生成行,然后使用余额子查询:

select d.dte, i.id,
       (select t2.after_balance
        from t t2
        where cast(t2.create_time as date) <= d.dte and
              t2.id = i.id
        order by t2.create_time desc
        limit 1  -- fetch first 1 row only
       ) as balance
from (select distinct cast(create_time as date) as dte
      from t
     ) d cross join
     (select distinct id
      from t
     ) i
order by d.dte, i.id;

这使用标准/通用 SQL。在您使用的数据库中,某些功能的表达方式可能有所不同。


推荐阅读