使用db query或php按周,月,3个月排序的数据库日期记录?

时间:2015-08-13 15:20:37

标签: php mysql

我有一个包含会员付款记录的数据库。像这样:

    Payment Date     |   Amount
---------------------------------
2014-02-01 00:00:00  |     10
2014-02-21 00:00:00  |     10
2014-07-22 00:00:00  |     10
2014-08-16 00:00:00  |     10
2014-11-23 00:00:00  |     10
2015-03-17 00:00:00  |     10
2015-04-30 00:00:00  |     10
2015-06-11 00:00:00  |     10
2015-07-11 00:00:00  |     10

... ETC

付款金额可能会有所不同,但并非总是如此。

我需要按星期,月份,三个月和一年的时间来获取付款记录,以及周期的总和和开始。

所以例如按年,我需要得到:

2014-01-01 00:00:00 - 50   //timestamp of beginning of the year
2015-01-01 00:00:00 - 40   //and the sum of payments that year

同样,对于季度记录,我需要得到:

2014-01-01 00:00:00 - 20   //timestamp of beginning 
2014-04-01 00:00:00 -  0   //of the trimester
2014-07-01 00:00:00 - 20   //and the sum of the payments
2014-10-01 00:00:00 - 10   //that trimester

2015-01-01 00:00:00 - 10   //timestamp of beginning 
2015-04-01 00:00:00 - 20   //of the trimester
2015-07-01 00:00:00 - 10   //and the sum of the payments that trimester

为了解决这个问题,我正在考虑两种可能的方法:

1) Put together a mysql query (if it possibly exists) 

2) Get all the records from the user and just sort them with php

我准备去寻找php解决方案了,但有没有办法可以用mysql查询来实现?如果是这样,请您指导我完成该查询的路径?

此外,哪种解决方案更有效/更省时?

我希望我有道理。

1 个答案:

答案 0 :(得分:1)

您可以使用WEEK()MONTH()QUARTER()等功能获取这些群组。有一整套日期和时间函数here

要获得每年的计数,您可以执行以下操作:

SELECT YEAR(paymentDate), SUM(amount) AS totalAmount
FROM myTable
GROUP BY YEAR(paymentDate);

然后,您可以使用MAKEDATE函数获取一年中的第一天:

SELECT MAKEDATE(YEAR(paymentDate), 1);

您可能必须使用DATE_FORMAT来配置某个月/季度的第一天,但​​您会在我分享的链接中找到必要的功能。