0

我有一个数据集,我需要从中计算每天分组的所有行出现次数,并将它们汇总为以下格式的数据集:

|     date     |  count  |
|  2001-01-01  |    11   |
|  2001-01-02  |    0    |
|  2001-01-03  |    4    |

问题是,某些时间段的某些数据丢失了,应该创建新的日期以使计数为零。考虑到同样的问题,我搜索了各种主题,从他们那里我了解到,可以通过创建一个临时日历表来保存所有日期并将结果数据集与日期表连接来解决。

不过,我对我正在使用的数据库只有读取权限,因此我无法创建单独的日历表。那么这是否可以仅在单个查询中解决?如果没有,我总是可以在 PHP 中执行此操作,但我更喜欢更直接的方式来执行此操作。

编辑:只是根据评论中提出的问题进行澄清:缺少的日期是特定的用户给定时间范围所必需的。例如,查询可能是:

SELECT date(timestamp), count(distinct(id)) 
FROM 'table' 
WHERE date(timestamp) BETWEEN date("2001-01-01") AND date("2001-12-31")
GROUP BY date(timestamp)
4

2 回答 2

0

试试这个...

SELECT Date, COUNT(*) Count
FROM yourtable
GROUP BY Date

这肯定有效!

让我知道,如果它有帮助!

于 2012-06-18T08:10:07.230 回答
0

SQL真的不适合这种工作:/

这是可能的,但真的很混乱,我强烈建议你不要这样做。

最简单的方法是拥有一个单独的日历表,但正如您所说,您只有对数据库的读取访问权限。

另一种是使用这种技巧生成序列:

SELECT @rownum:=@rownum+1 rownum, t.*FROM (SELECT @rownum:=0) r, ("yourquery") t;

正如我已经告诉你的那样,我不会进入它,它真的很丑:(

于 2012-06-18T09:52:35.930 回答