我有一个工作事件跟踪器,它可以在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查询获取值:
从数据库中选择DATE_FORMAT(日期,"%Y%m%d")作为日期、事件、计数(*),其中date>=“+ daystartdate +‘和date<=”“+ dayenddate +'”组按年(日期)、月份(日期)、日期(日期)、事件
给我这个:
+----------+----------+-------+
| 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代码中的结果。我尝试了许多可能的解决方案,但没有成功。
谢谢。
发布于 2014-03-26 16:32:06
这是一个非常常见的问题,关键词搜索是“转置”和“枢轴”。为了省去麻烦,这是MySQL无法做到的事情。不过,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;
});https://stackoverflow.com/questions/22667361
复制相似问题