我不想在这里问一个问题,因为我知道它已经完成了(稍微),但由于字段格式,我的问题略有不同。我在连接和小时选择以及其他方面尝试了很多东西,而且我被卡住了。会爱得快。
我有一个像这样的MySQL表:
CREATE TABLE `VAT` (
`VATid` int(11) NOT NULL AUTO_INCREMENT,
`VATDate` date DEFAULT NULL,
`VATTime` varchar(10) DEFAULT NULL,
`VATPledgeAmount` float DEFAULT NULL,
PRIMARY KEY (`VATid`),
UNIQUE KEY `VATid_UNIQUE` (`VATid`)
) ENGINE=MyISAM AUTO_INCREMENT=6531 DEFAULT CHARSET=latin1;
VATDate字段的日期格式为YYYY-MM-DD,VATTime字段为带有前导零的HHMM,如下表所示,带有一些示例数据。
样本表数据:
VATid | VATDate | VATTime | VATPledgeAmount |
--------------------------------------------------
1 | 2016-06-30 | 0730 | 100 |
2 | 2016-06-30 | 0733 | 20 |
3 | 2016-06-30 | 0840 | 70 |
4 | 2016-06-30 | 0943 | 100 |
5 | 2016-06-30 | 0730 | 50 |
6 | 2016-07-01 | 2113 | 50 |
7 | 2016-07-01 | 2302 | 300 |
8 | 2016-07-02 | 0416 | 10 |
9 | 2016-07-02 | 0417 | 10 |
10 | 2016-07-02 | 0418 | 10 |
我想要做的是让MySQL服务器为我做计算,这样当数据出来时仍会显示日期,但每小时PledgeAmount的总值会被累加并分组。
Counts | g_VATDate | g_VATTime | Total_VATPledgeAmount |
--------------------------------------------------
2 | 2016-06-30 | 0700 | 120 |
1 | 2016-06-30 | 0800 | 70 |
1 | 2016-06-30 | 0900 | 100 |
1 | 2016-07-01 | 2100 | 50 |
1 | 2016-07-01 | 2300 | 300 |
3 | 2016-07-02 | 0400 | 30 |
我希望这是有道理的。我打算将它用于JS图表,但由于我不需要或想要个人承诺及其金额值,我只想要每小时的金额和总数。
答案 0 :(得分:1)
您可以使用concat(left(VATTime, 2), '00')
来获取时间:
select count(VATid) counts, VATDate g_VATDate,
concat(left(VATTime, 2), '00') g_VATTime,
sum(VATPledgeAmount) Total_VATPledgeAmount
from VAT
group by g_VATDate, g_VATTime;