按小时和日期分组

时间:2016-05-17 06:11:47

标签: mysql date time group-by

我不想在这里问一个问题,因为我知道它已经完成了(稍微),但由于字段格式,我的问题略有不同。我在连接和小时选择以及其他方面尝试了很多东西,而且我被卡住了。会爱得快。

我有一个像这样的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图表,但由于我不需要或想要个人承诺及其金额值,我只想要每小时的金额和总数。

1 个答案:

答案 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;