我有一个工作事件跟踪器,可以在mysql表中写入每个事件。
表
id date userid event
5100 2014-03-25 14:18:55 user333 AI
5101 2014-03-25 14:19:02 user333 Click
5102 2014-03-25 14:19:02 user333 Click
...
到目前为止,这项工作非常好。但现在,我想在node.js中编写一个小报告工具
我尝试使用此SQL查询获取值:
SELECT DATE_FORMAT(date,"%Y%m%d")AS date,event,count(*)AS count FROM databasetest WHERE date> ="' + daystartdate + '"和日期< ="' + dayenddate +'" GROUP BY YEAR(日期),MONTH(日期),DAY(日期),事件
给我这个:
+----------+----------+-------+
| date | event | count |
+----------+----------+-------+
| 20140320 | AI | 6 |
| 20140320 | Click | 2 |
| 20140320 | swipe | 2 |
| 20140321 | Click | 6 |
| 20140321 | error | 5 |
| 20140321 | swipe | 2 |
| 20140321 | touch | 3 |
| 20140322 | AI | 3 |
| 20140322 | Click | 3 |
| 20140322 | error | 1 |
| 20140322 | mapsload | 3 |
| 20140322 | touch | 1 |
| 20140323 | AI | 2 |
| 20140323 | Click | 2 |
| 20140323 | touch | 5 |
| 20140324 | AI | 3 |
| 20140324 | Click | 1 |
| 20140325 | AI | 25 |
| 20140325 | Click | 48 |
| 20140325 | error | 16 |
| 20140325 | mapsload | 7 |
| 20140325 | swipe | 15 |
| 20140325 | touch | 32 |
+----------+----------+-------+
但我需要这种形式的数据:
+----------+----------+-------+-----
| date | Click | AI | ....
+----------+----------+-------+-----
| 20140320 | 0 | 6 |
| 20140321 | 2 | 2 |
| 20140321 | 2 | 5 |
这可能是SQL查询还是我需要在我的javascript代码中循环结果。我尝试了很多可能的解决方案,但没有让它工作。
谢谢。
答案 0 :(得分:0)
这是一个非常常见的问题,搜索关键字是"转置" " pivot"。为了省去麻烦,这是MySQL无法做到的。但是,SQL Server(MS产品)可以做到这一点。
您需要循环输出并自己构建结果集。
var results = []
data.forEach(function(row, rowidx) {
results[row.date] = results[row.date] || {};
results[row.date][row.event] = results[row.date][row.event] || 0;
results[row.date][row.event] += row.count;
});