2010-09-02 48 views
2

我有(为了简单起见调整)一个包含2列的表格 - startend,它们都是时间戳。这些代表电话。SQL Server:查询交叉引用与未存储在表中的数据集?

我需要产生归结为一个图形,沿着X轴的时间,以及沿着Y轴的同时调用。

我可以很容易地提取在任何给定时间的并发呼叫的数量,当然 - 像这样的东西:

select 
    count(*) 
from 
    calls_table 
where 
    time_started < 1282854000 and time_ended > 1282854000 

这只是给我的号码后面的特定时间。我需要做的是在我的查询中包含选择的时间(例如每小时一小时),并拉取该时间戳的同时呼叫计数?所有伟大的想法感激地收到!

+0

什么数据类型**完全**是你的'开始'和'结束'列?真的是'TIMESTAMP'?这与时间或任何类似的事情没有关系,并且会是一个完全错误的数据类型在这里使用...... – 2010-09-02 15:56:53

+0

如果您发布代码或XML,请**在文本编辑器中突出显示这些行,然后单击“编辑器“工具栏上的”编码“按钮(101 010)可以很好地格式化和语法突出显示它!理解,marc - – 2010-09-02 15:57:11

+0

- 谢谢。 – 2010-09-03 09:42:38

回答

2

如果SQL Server 2005+可以使用递归CTE,然后加入。示例如下。

declare @start int 
declare @end int 
declare @increment int 

set @start = 1282854000 
set @increment = 10000 
set @end = 1282954000 

;with nums as 
(
select @start as i 
UNION ALL 
select [email protected] 
FROM nums 
where [email protected] <= @end 
) 
select i 
from nums 
option (maxrecursion 0) 
+0

马丁,那绝对完美!谢谢,先生 - 相当出色的东西:) – 2010-09-02 15:15:00

-1

有几种可能的方法,一些浮现在脑海:

  1. 使用一个循环,在每次迭代中插入 您的选择导致临时表/ 表变量
  2. 创建临时表/表变量,并在第一个 列和空的第二列填充它 与您的X轴值; 然后做一个更新就可以了填充使用在第一列中的值基于 查询的 第二列
  3. 使用他们所谓的“日历表” - 与触发更新, 有很大的帮助,性能也为 他们像高速缓存一样行动