【发布时间】:2011-01-02 01:52:10
【问题描述】:
我希望向现有应用程序(数据库是 Microsoft SQL 2005)添加一些新功能。基本上,我正在尝试计算特定部门在特定日期范围内“无人值守”的分钟数(或秒数)。我希望用一条语句理想地查询数据集。我有一个循环遍历记录集,解析它并吐出答案的例程,但它非常难看。有没有人对我如何优化它的可读性有任何建议,使用纯 SQL - 甚至任何关于我应该看什么的指针/文章,我的 Googlefu 都让我失望了。
我想在某些方面这几乎就像是对日历的“空闲时间”搜索,但是是聚合的。
这是一个模拟示例数据集,可让您了解我正在处理的工作(实际上是同事打卡,然后打卡)。为了简单起见,我在下面使用四舍五入到分钟,但我可能会以秒为单位进行计算。
------------------------------------------------------------------------
| Colleague Id | Department Id | Date In | Date Out |
------------------------------------------------------------------------
| 1 | 1 | 04/01/2010 08:45 | 04/01/2010 11:45 |
| 2 | 1 | 04/01/2010 09:00 | 04/01/2010 12:15 |
| 3 | 1 | 04/01/2010 10:00 | 04/01/2010 12:00 |
| 4 | 1 | 04/01/2010 12:30 | 04/01/2010 17:00 |
| 1 | 1 | 04/01/2010 12:45 | 04/01/2010 17:15 |
| 3 | 1 | 04/01/2010 13:00 | 04/01/2010 17:25 |
| 5 | 2 | ... | ... |
------------------------------------------------------------------------
例如,如果我在 04/01/2010 08:30:00 和 04/01/2010 17:30 之间查询上表的 Department Id = 1: 00,我预计 35 分钟(或 2100 秒) 的“无人值守时间”(这是该范围的开始、中间和结束的时间总和)无人)。
【问题讨论】:
标签: sql sql-server sql-server-2005