按时间范围确定的每月计数

Posted

技术标签:

【中文标题】按时间范围确定的每月计数【英文标题】:Monthly Counts determined by time range 【发布时间】:2013-08-05 17:05:41 【问题描述】:

我有一个查询可以返回一个月的行数(不同的 child_name)。我想写一个查询,这样我就可以带回几个月的总数。我希望能够选择一个时间范围并在我选择的范围内自动计算月份,而无需对每个月进行硬编码。我阅读了一些关于循环和序列的信息,但我发现很难理解。

DECLARE @From_DT DATE = '2012-07-01', @To_DT DATE = '2013-7-30';

SELECT count(Child_Name) as July12_Count
FROM ECMS_BACKUP.dbo.vw_B2H_CLIENTS
WHERE CLT_NBR IN (SELECT CLT_NBR FROM ECMS_BACKUP.dbo.ufn_B2H_Enrolled_Clients_List(@From_DT,  @To_DT))

我想要一个像下面这样没有硬编码的结果。

如果我要选择:

 DECLARE @From_DT DATE = '2012-07-01', @To_DT DATE = '2013-10-31';

我会得到这个:

July12_Count  Aug13_Count  Sep13_Count  Oct13_Count  

251           255          250          245

感谢任何反馈!

【问题讨论】:

不确定ufn_B2H_Enrolled_Clients_List(@From_DT, @From_DT)是否应该是ufn_B2H_Enrolled_Clients_List(@From_DT, @To_DT)(注意从@From_DT@To_DT的变化) @Martin Parkin 是的,应该是 From_DT 到 To_DT。谢谢。 @From_DT@To_DT 之间的最大时间范围是多少?不到 1 年或更长?如果一些用户使用这些参数执行这个存储过程:'2012-01-01' & '2013-0-30' 怎么办? @BogdanSahlean 是的,一年 那么你应该检查这些参数。如果用户输入以下值会发生什么:'2012-01-15' & '2013-01-14'?您的查询将返回来自January 2012January 2013 的行。 【参考方案1】:

我必须假设vw_B2H_CLIENTS 中的一列是您过滤的日期。

在这种情况下,您可以尝试使用 DATEPART 按月份分组(用您的日期列替换 DATE_COL),如下所示:

SELECT DATEPART(month, DATE_COL) AS Month,
       COUNT(*) AS Count
  FROM ECMS_BACKUP.dbo.vw_B2H_CLIENTS
  WHERE CLT_NBR IN (SELECT CLT_NBR FROM ECMS_BACKUP.dbo.ufn_B2H_Enrolled_Clients_List(@From_DT, @To_DT))
  GROUP BY DATEPART(month, DATE_COL)

另请注意,ufn_B2H_Enrolled_Clients_List 中可能有错误,因为您将@From_DT 作为参数两次(您可能需要@To_DT)。

这会给你这样的输出:

Month   Count
7       251
8       255
9       250
10      245

【讨论】:

非常感谢。当我运行它时,我收到错误消息:Msg 207,Level 16,State 1,Line 8 Invalid column name 'DATE_COL'。消息 207,级别 16,状态 1,第 4 行无效的列名称“DATE_COL”。 正如我所说,请确保您:replace DATE_COL by your date column。因此,您必须使用您在 vw_B2H_CLIENTS table\view 中过滤的日期列才能使其正常工作。有两个 DATE_COL 实例要替换(一个在 SELECT 中,一个在 GROUP BY 中) - 确保你得到两个。

以上是关于按时间范围确定的每月计数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用一系列日期和每月计数创建查询?

具有特定条件计数的 Mongodb 聚合并按输出投影的日期范围过滤不能按预期工作

按日期范围分区 PostgreSQL 扫描所有分区

Prometheus 按标签查询范围向量

计数排序

按年份将数据汇总为每月计数