【发布时间】:2017-02-19 04:44:11
【问题描述】:
目标:创建一份报告,根据历史数据提供我们会议系统在一天中的任何时间的平均线路数
给定: 会议唯一 ID、会议开始时间(时间)、会议结束时间(时间)、会议持续时间(基本上是结束时间 - 开始时间的整数)、每个会议上的行数.这些是代表 2 年数据的约 250,000 行的 SQL 表中的列。
问题:一开始这看起来很容易。只需运行一个查询,按小时和分钟查找行和组的总和,如下所示:
Select Datepart(hour,[Actual Conference Begin Time]) as 'Hour',
Datepart(minute,[Actual Conference Begin Time]) as 'Minute',
SUM([Actual Total Lines]) as 'Lines'
From Filtered
Group By DatePart(hour,[Actual Conference Begin Time]),
Datepart(minute,[Actual Conference Begin Time])
Order By DatePart(hour,[Actual Conference Begin Time]),
Datepart(minute,[Actual Conference Begin Time])
但是此查询仅考虑“在那个时间开始”的调用的总行数。它没有捕捉到这样一个事实,即在一天中的任何给定分钟,都有多个呼叫在进行,这些呼叫都在不同的时间开始并运行了不同的持续时间。
建议的解决方案:我最初解决这个问题的计划是创建另一个表并使用循环在一天中的那个小时内用一个每小时和每分钟的外壳填充它。然后基本上逐行“解析”我的主数据表并找到开始时间、持续时间和行数,然后转到我的小时/分钟表并从开始时间开始填充它,并向下填充相同数字的行行数作为持续时间。它将通过添加到当前单元格中的值而不是替换来在另一列中用“# of lines”填充这些中的每一个。小时/分钟表本质上是系统上任何给定小时/分钟行数的一个大计数板。
建议的解决方案 2: 我还想到了另一个潜在的解决方案。查看数据库中的每一行,并在开始和结束时间戳之间的每分钟创建更多相同的行。因此,例如,如果您有一个 10 分钟的电话,则将在每列中创建 9 多行,其中包含所有相同的信息,除了每行中的时间戳会多一分钟。现在表中将有足够的数据来运行上面的聚合查询。
我已经创建了小时/分钟的 shell 表,但我认为上述解决方案在 SQL 中可能无法实现。我还尝试在 Tableau 中操作数据而没有结果。
如果您知道用 SQL 或其他方法呈现此信息的解决方案,请告诉我。我有更多代码要分享以显示进度。
谢谢。
【问题讨论】:
-
使用从 0 到您的经期分钟数的计数表 n= int。将 n 分钟添加到您的期间的开始日期。那是你的日历。现在,您可以在日历中加入跨分钟的事件。按分钟分组后添加行。
标签: sql sql-server load tableau-api