繁体   English   中英

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

[英]Selecting missing rows and grouping by date (with read-only access to DB)

我有一个数据集,我需要根据该数据集每天对所有发生的行进行分组,并将它们汇总为以下格式的数据集:

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

尝试这个...

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

这可以肯定!!!

让我知道,如果有帮助!

SQL 实际上不是用于这种工作的:/

这是可能的,但确实非常混乱,我强烈建议您不要这样做。

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

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

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

正如我已经告诉您的那样,我不会讲它,这真的很丑:(

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM