如何在SQL Server Management Studio 2012中创建每日唯一键计数矩阵
解决方案
完全可以通过单次SQL查询直接生成你需要的统计矩阵,不需要管理员权限,仅用普通查询权限即可实现,无需重复运行多次查询。
以下根据你的统计需求提供两种适配方案:
方案1:匹配你当前手动统计的「截至当日累计唯一键行数」
和你每次修改日期手动执行的查询结果完全一致,单次查询即可输出所有日期的累计统计值,SQL如下:
SELECT DATE_FORMAT(RecordCreatedDate, '%d/%m/%Y') AS Date_For_Data, DATE_FORMAT(RecordCreatedDate, '%d/%m/%Y') AS Date_data_checked, (SELECT COUNT(UniqueKey) FROM TableName t2 WHERE t2.RecordCreatedDate <= DATE(t1.RecordCreatedDate)) AS `Count` FROM TableName t1 GROUP BY DATE(RecordCreatedDate) ORDER BY DATE(RecordCreatedDate) ASC;
提示:如果你的统计逻辑是取「统计日期前一天及之前的累计值」,把子查询里的
<=改为<即可。
如果你的数据库支持CTE和窗口函数,推荐使用效率更高的版本:
WITH daily_add_count AS ( SELECT DATE(RecordCreatedDate) AS stat_date, COUNT(UniqueKey) AS daily_num FROM TableName GROUP BY DATE(RecordCreatedDate) ) SELECT DATE_FORMAT(stat_date, '%d/%m/%Y') AS Date_For_Data, DATE_FORMAT(stat_date, '%d/%m/%Y') AS Date_data_checked, SUM(daily_num) OVER (ORDER BY stat_date ASC) AS `Count` FROM daily_add_count ORDER BY stat_date ASC;
方案2:统计每日新增的唯一键行数
如果你后续需要按天统计新增的唯一键数据量,直接用分组聚合即可实现,逻辑更简单:
SELECT DATE_FORMAT(RecordCreatedDate, '%d/%m/%Y') AS Date_For_Data, DATE_FORMAT(RecordCreatedDate, '%d/%m/%Y') AS Date_data_checked, COUNT(UniqueKey) AS `Count` FROM TableName GROUP BY DATE(RecordCreatedDate) ORDER BY DATE(RecordCreatedDate) ASC;
上述两种方案的查询结果都可以直接导出为CSV格式,复制粘贴到Excel即可匹配你当前使用的表格格式,无需额外手动整理。
注:不同数据库的日期格式化函数略有差异,SQL Server可替换为
CONVERT(VARCHAR, stat_date, 103),Oracle可替换为TO_CHAR(stat_date, 'dd/mm/yyyy')。
内容的提问来源于stack exchange,提问作者paru80
相关产品推荐
相关产品推荐

