Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mysql中实现特定日期之间的数据交换_Mysql - Fatal编程技术网

在Mysql中实现特定日期之间的数据交换

在Mysql中实现特定日期之间的数据交换,mysql,Mysql,我有三个名为User、Role和Balance_updates的表。用户表包含有关用户的信息,角色描述用户类型,如客户、管理员、经理和余额\更新存储所有与余额相关的交易,即存储与余额相关的交易的历史记录 桌子 使用者 余额更新 +------------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default

我有三个名为User、Role和Balance_updates的表。用户表包含有关用户的信息,角色描述用户类型,如客户、管理员、经理和余额\更新存储所有与余额相关的交易,即存储与余额相关的交易的历史记录

桌子

使用者

余额更新

+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL              | auto_increment |
| username   | varchar(15)  | NO   |     | NULL              |                |
| role_id    | int(11)      | YES  |     | NULL              |                |
| amount     | double(20,2) | YES  |     | NULL              |                |
| updated_at | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+------------+--------------+------+-----+-------------------+----------------+
余额表中的数据更新

+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL              | auto_increment |
| username   | varchar(15)  | NO   |     | NULL              |                |
| role_id    | int(11)      | YES  |     | NULL              |                |
| amount     | double(20,2) | YES  |     | NULL              |                |
| updated_at | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+------------+--------------+------+-----+-------------------+----------------+
客观的

我希望在任何给定日期生成所有用户及其各自的余额; 例如,如果我想要给定日期2012-12-28的余额对账单,它应该根据余额更新生成最新余额

我试过的

结果与问题

正如您所期望的那样,它将返回来自Balance_更新的所有值,即记录的每个其他用户事务

问题:

1.如何获取用户在特定日期的最新余额报表。如果在该日期用户余额未更改,则显示其上次更改的余额

任何帮助都将不胜感激

未经测试,但我感觉这可能会起作用,并且可以优化

只需一条离题建议:

添加一个到表用户,例如User.id;让它成为主键 将列Balance\u updates.username替换为例如Balance\u updates.user\u id,并存储对user.id a的引用。 或

将列Balance_updates.username更改为VARCHAR20以匹配User.username的类型
很抱歉迟了回复…但谢谢你,它能工作…我会按照你的建议整理我的数据库…再次感谢。。
SELECT DISTINCT (
u.username
), r.value, u.amount AS `amount`
FROM Balance_updates u
INNER JOIN Role r ON u.role_id = r.id
WHERE u.amount > 0.0 && UNIX_TIMESTAMP( u.updated_at ) < UNIX_TIMESTAMP( '2013-1-3 23:59:59' )
ORDER BY r.value, UNIX_TIMESTAMP( u.updated_at ) DESC
SELECT DISTINCT u.username, r.value, u.amount AS `amount`
FROM Balance_updates u
INNER JOIN Role r ON u.role_id = r.id
WHERE u.updated_at = (
    SELECT MAX(inner_u.updated_at)
    FROM Balance_updates AS inner_u
    WHERE
        inner_u.username = u.username
        && amount > 0
        && UNIX_TIMESTAMP( inner_u.updated_at ) < UNIX_TIMESTAMP( '2013-1-3 23:59:59' )
)
ORDER BY r.value, UNIX_TIMESTAMP( u.updated_at ) DESC