【发布时间】:2016-08-18 08:19:12
【问题描述】:
考虑表Credits
CREATE TABLE `Credits` (
`UserID` int(11) unsigned NOT NULL DEFAULT '0',
`Amount` int(11) NOT NULL DEFAULT '0',
`Created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`Expire` datetime NOT NULL DEFAULT '9999-12-31 23:59:59'
)
有数据:
UserID Amount Created Expire
1 10 2016-01-14 2016-05-30
1 -2 2016-02-04 9999-12-31
1 3 2016-06-01 2016-09-30
没有Expiry处理,获取当前用户的数量,可以通过简单的select来处理
SELECT SUM(Amount) FROM Credits WHERE UserID = 1;
现在,我需要编写一个 SELECT 查询,输入参数为日期,并且能够获得当时可用的积分,如下所示..
在..
- 2016-01-15 => 10
- 2016-02-06 => 8
- 2016-05-31 => 0
- 2016-06-03 => 3
是否可以仅使用上述架构?或者我需要添加额外的字段?
SQLFiddle:http://sqlfiddle.com/#!9/3a52b/3
【问题讨论】:
-
请显示进行更新的代码。请在帮助中心阅读有关 MCVE 的信息。
-
这里有一个设计陷阱。如果某人的积分在不同日期到期,您需要某种逻辑来准确计算出消耗了哪些积分 - 这很重要,因为到期可能会根据选择的积分产生不同的余额结果。如果支出可以退还,那就更麻烦了。
-
@JeffreyHantin,你是对的,所以对于这个问题,我也在寻找可以做任何设计改进..
-
@Ryan,我已经添加了答案。
标签: mysql sql database database-design database-schema