选择缺失的行并按日期分组(对DB具有只读访问权限)

时间:2012-06-18 07:49:48

标签: mysql sql

我有一个数据集,我需要从中计算每天分组的所有行事件,并将它们合并为以下格式的数据集:

|     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)

2 个答案:

答案 0 :(得分:0)

试试这个......

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

这肯定有用!!!

如果有帮助,请告诉我!

答案 1 :(得分:0)

对于这类工作, 真的没有:/

这是可能但非常非常混乱,而且强烈阻止你这样做。

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

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

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

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