User
、、という名前の3つのテーブルがRole
ありBalance_updates
ます。User
テーブルはユーザーに関する情報を保持し、Role
Customer、Admin、Managerなどのユーザーのタイプを示し、Balance_updates
残高に関するすべてのトランザクションを保存します。つまり、残高に関連するトランザクションに関する履歴を保存します。
テーブル
ユーザー
+-----------------------+--------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+--------------+------+-----+-------------------+-------+
| username | varchar(20) | NO | PRI | NULL | |
| password | varchar(32) | NO | | NULL | |
| email | varchar(50) | YES | | NULL | |
| role_id | int(11) | NO | MUL | NULL | |
| mobile_wallet_balance | double(20,2) | NO | | 0.00 | |
| merit_point | bigint(20) | YES | | NULL | |
| status | int(11) | NO | | NULL | |
| is_auto_btm_enabled | tinyint(1) | YES | | 0 | |
| created_at | datetime | YES | | NULL | |
| updated_at | timestamp | YES | | CURRENT_TIMESTAMP | |
| gender | varchar(20) | YES | | NULL | |
| validity | date | YES | | NULL | |
| status_desc | text | YES | | NULL | |
+-----------------------+--------------+------+-----+-------------------+-------+
Role
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(25) | NO | UNI | NULL | |
| description | varchar(255) | YES | | NULL | |
| value | varchar(25) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
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 | |
+------------+--------------+------+-----+-------------------+----------------+
Balance_updatesのデータ
目的
任意の日付ですべてのユーザーとそれぞれの残高を生成したいと思います。たとえば、特定の日付の貸借対照表が必要な場合は、2012-12-28
から最新の貸借対照表を生成する必要がありBalance_updates
ます。
私が試したこと
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
結果と問題
ご想像のとおり、Balance_updatesからすべての値、つまり記録された他のすべてのユーザートランザクションが返されます。
質問:
1.特定の日付のユーザーの最新の残高ステートメントを取得するにはどうすればよいですか。その日付のユーザー残高が変更されていない場合は、最後に変更された前回の残高を表示します。
どんな助けでもありがたいです。