enter code here
我有一个结构如下的表:
| ID (bigint) | APPID (Bigint)| USAGE_START_TIME (datetime) | SESSION_TIME (bigint) | USERID (bigint) |
-----------------------------------------------------------------------------------------------------------
| 1 | 1 | 2013-05-03 04:42:55 | 400 | 12 |
| 2 | 1 | 2013-05-12 06:22:45 | 200 | 12 |
| 3 | 2 | 2013-06-12 08:44:24 | 350 | 12 |
| 4 | 2 | 2013-06-24 04:20:56 | 2 | 12 |
| 5 | 3 | 2013-06-26 08:20:26 | 4 | 12 |
| 6 | 4 | 2013-09-12 05:48:27 | 50 | 12 |
现在,如果 put 是用户 ID,我想获得过去 6 个月每月(所有应用程序)的总(总和)session_time。
如果一个应用程序在一个月内使用超过一次(基于usage_start_time),则只有最新的session_time 应该包含在该应用程序的总和中。
对于上面的例子,结果应该是这样的(如果当前月份是 10 月,并且输入是 userid=13):
| MONTH | TOTAL_SESSION_TIME |
------------------------------------
| 10 | 0 |
| 9 | 50 |
| 8 | 0 |
| 7 | 0 |
| 6 | 6 |
| 5 | 200 |
这里月份以数字形式表示月份(例如:10 表示 10 月)。
目前我每个月都使用单独的查询。例如:
SELECT
COALESCE(SUM(failcount),0) AS TOTAL_SESSION_TIME , MONTH(CURRENT_DATE) AS MONTH
FROM appstime
WHERE MONTH(`USAGE_START_TIME`) = MONTH(CURRENT_DATE) AND userid=12
但这并没有给我预期的结果。
另外,我想知道我是否可以使用单个查询而不是每个月的查询来执行此操作。我正在使用 PHP+Mysql。
请在此处查看 sql fiddle:http ://sqlfiddle.com/#!2/4eaf2
谢谢你,
萨什