我把银行里的数据放在一个表格里.该表包含所有过帐和余额.问题是,如果一个日期没有过帐,那么就没有分录,因此就没有余额.

我想得到一个表与所有日期(例如今天和一年回来) for each 帐户.然后我将加入汇率和总和每天,所以我有一个"银行总余额"每天.

下面是我的表中的示例数据(简化后,只包含相关列,不包括Amount,以便于理解该表):

Id Account Currency Date Amount Balance
100 1 EUR 2024-02-10 100 550
101 1 EUR 2024-02-10 15 565
102 2 USD 2024-02-10 50 420
103 1 EUR 2024-02-10 13 578
104 1 EUR 2024-02-11 -8 570
105 1 EUR 2024-02-12 310 880
106 1 EUR 2024-02-12 -50 830

当天的余额总是ID最高的余额.

请注意,情况并非如此.

Date Currency Balance
2024-02-10 EUR 578
2024-02-10 USD 420
2024-02-11 EUR 570
2024-02-11 USD 420
2024-02-12 EUR 830
2024-02-12 USD 420

我有一个日期表(不知道是否有必要).

我试了很多,但就是想不出该怎么做.

我已经走了这么远:

SELECT Date, Currency, Balance
FROM bank
WHERE Id IN (
  SELECT MAX(Id) AS Id
  FROM bank
  WHERE Account IN (1, 2)
  GROUP BY Date, Currency
 )

推荐答案

我的 comments 大致是这样的:

with currencies as (
  select distinct(currency) as currency from bank
),
curr_dates as (
  select *
  from dates as d
  join currencies
  where `date` between '2024-02-10' and '2024-02-12'
)
select *,
  (
    select balance
    from bank as b
    where b.`date` <= cd.`date`
      and b.currency = cd.currency
      and b.account in (1, 2)
    order by b.id desc
    limit 1
  ) as balance
from curr_dates as cd
order by date;

菲德尔:https://www.db-fiddle.com/f/gt9sEP9YX7Y4zteae6ddk1/2

它输出:

date currency balance
2024-02-10 EUR 578
2024-02-10 USD 420
2024-02-11 EUR 570
2024-02-11 USD 420
2024-02-12 EUR 830
2024-02-12 USD 420

它可能不是执行的,不幸的是,没有给定的答案在答案中产生预期的结果.

另外,我想知道为什么2024-02-10EUR565(第101行)而不是578(第103行),这是一个错误吗?

Mysql相关问答推荐

MariaDB字段+1

可以在MySQL表名中使用表情包吗?

使用NOT EXISTS()时出现MySQL查询错误

如何优化使用多个 LEFT JOIN 和 GROUP BY 子句的慢速 MySQL 查询?

使用 Having 表达式连接多个表

最后一个字母 '%n' 的 mysql SELECT 字符串不起作用

为什么以及如何将 Django filter-by BooleanField 查询转换为 SQL WHERE 或 WHERE NOT 而不是 1/0?

如何在 SQL 中计算留存曲线?

INNER JOIN 问题(MySQL 错误代码:1054)

如何通过未知列中的唯一值有效地更新 MySQL 行

MySQL:使用来自查询的信息创建一个新表

没有 JDBC 类型的方言映射:1111

当您无法修复表时,如何修复 MySQL不正确的密钥文件错误?

将 MySQL 查询的输出转换为 utf8

Laravel classloader.php 错误打开流失败:没有这样的文件或目录

用于国际和多语言目的的数据库建模

SQL - 如何找到列中的最高数字?

如何使用 SQL 数据库中的经纬度查找最近的位置?

为什么 GRANT 在 MySQL 中不起作用?

来自 MySQL 中多个表的 COUNT(*)