将多个SQL查询合并为1个

3

我有些卡在尝试合并几个查询的过程中。我得到的是一个包含统计数据和对另一个表的引用的表。

为了获取统计报告,我运行以下代码(简短版):

SELECT COUNT(id) 
from [Actions] 
where date between '2012-01-01 00:00:00' AND '2012-01-01 23:59:59' 
  AND [Action]='request'

问题是如果我想在指定的时间段内获取每日统计数据,查询应该是什么样子的?我知道如果我改变开始和结束日期,我会得到整个指定期间的统计数据,而不是按天分组的。我错过了什么吗?

1个回答

3

只需消除时间部分,然后按日期进行GROUP BY

SELECT 
  CONVERT(VARCHAR(10), [date], 121) ByDay, COUNT(id) 
FROM [Actions] 
WHERE date BETWEEN '2012-01-01 00:00:00' AND '2012-01-01 23:59:59' 
  AND [Action]='request'
GROUP BY CONVERT(VARCHAR(10), [date], 121)

我知道我漏掉了什么!谢谢,但我猜正确的做法应该是使用101而不是121来防止查询按分钟和秒钟分组记录。我是对的吗? - Alex D
@AlexD - 我认为这两个对你都适用。121会起作用,因为它只会通过varchar(10)获取前10个字符,这些字符仅为日期部分。 - Mahmoud Gamal
无论如何,非常感谢您提醒我GROUP BY的工作原理! - Alex D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接