我有一个记录集,包含两个独立字段中的开始和结束时间:
id - Int
startTime - DateTime
endTime - DateTime
我想找到一种查询记录的方法,并根据在开始和结束时间之间找到的15分钟间隔的数量将其作为X记录返回。
例如,假设我有这样的记录:
id, StartTime, EndTime
1, 1/1/2010 8:28 AM, 1/1/2010 8:47 AM
我将返回3条记录,第一条记录代表8:15区间,#2代表8:30区间,然后是3分钟代表8:45区间。
我意识到这可以使用sproc中的逻辑来完成,但我们正在尝试保持数据库中立,因为我们支持多个数据库引擎。
答案 0 :(得分:2)
为什么不用服务器端语言进行处理?它会更容易,肯定会让你成为数据库中立的。
答案 1 :(得分:1)
似乎有两种基本方法 1.迭代地计算每个间隔(循环或递归) 2.使用查找表
由于一些函数的实现(用于递归计算)甚至对循环的定义都会有所不同,因此最通用的似乎是查找表。它也可能很快。
答案 2 :(得分:0)
我同意Keith的说法,这可能在应用程序中做得更好。对于大型源表,服务器和查找表的交叉连接将变得昂贵,但只是为了好玩,我编写了一个快速的样本。
declare @QuarterHours table (
QuarterHour time
)
declare @x time
set @x = '00:00'
insert into @QuarterHours
(QuarterHour)
values
(@x)
set @x = DATEADD(minute, 15, @x)
while @x <> '00:00' begin
insert into @QuarterHours
(QuarterHour)
values
(@x)
set @x = DATEADD(minute, 15, @x)
end /* while */
declare @test table (
id int,
starttime datetime,
endtime datetime
)
insert into @test
(id, starttime, endtime)
values
(1, '2010-01-01 08:28', '2010-01-01 08:47')
select t.id, q.QuarterHour
from @test t
cross join @QuarterHours q
where q.QuarterHour between cast(t.starttime as time) and cast(t.endtime as time)