首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是对datediff进行TSQL计算的最有效方法吗?

这是对datediff进行TSQL计算的最有效方法吗?
EN

Stack Overflow用户
提问于 2013-01-07 11:08:17
回答 1查看 171关注 0票数 0

我有一个与下面类似的数据表,我需要计算到今天为止所有暂停时间的总和。列中可以有任意日期,因此PauseStart可以是未来日期,PauseEnd也可以是未来日期。空日期(20991231)被认为是开放结束的,即没有选择暂停的结束日期。

注:日期为英国日期格式

数据

代码语言:javascript
复制
PauseID RecID   PauseStart              PauseEnd
1022    10      2013-01-04 15:52:04.320 2013-01-21 00:00:00.000
1023    10      2013-01-01 00:00:00.000 2013-01-02 00:00:00.000
1024    10      2013-01-05 00:00:00.000 2099-01-01 00:00:00.000

上述数据显示,2013年1月1日至2013年2月1日之间暂停,2013年4月1日至2013年1月21日(2013年1月4日至2013年7月1日11:00)和2013年5月1日至2013年1月7日11:00之间的暂停(2013年1月5日至2013年1月7日11:00)和2013年5月1日至2013年1月7日( 11:00:00)的总数应暂停。

这些列没有编入索引。

,我想出的TSQL如下所示

代码语言:javascript
复制
SELECT 
    SUM (
    CASE 
    WHEN NULLIF(PauseEnd,'20991231') IS NULL THEN
        DATEDIFF(mi, PauseStart, ISNULL(NULLIF(PauseEnd,'20991231'), GetDate()))
    WHEN PauseEnd > GetDate() THEN
        DATEDIFF(mi, PauseStart, GetDate())
    ELSE
        DATEDIFF(mi, PauseStart, ISNULL(NULLIF(PauseEnd,'20991231'), GetDate()))
    END
        ) AS Datedifference
    FROM Pauses
WHERE Pauses.RecID = 10
AND PauseStart < GetDate()

这给了我结果

代码语言:javascript
复制
4021
1440
3533

这似乎是正确的,但我的问题仍然存在,

这是实现这一结果的最有效的方法吗?

增编,这个表可以开始保存数百万条记录,所以我想首先使计算总和的tsql有效。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-07 11:19:23

我会这样做:

代码语言:javascript
复制
SELECT 
PauseStart,
DATEDIFF(mi, PauseStart, CASE  WHEN PauseEnd > GetDate() THEN GetDate() ELSE PauseEnd END) as Datedifference
FROM Pauses
WHERE Pauses.RecID = 10 AND PauseStart < GetDate()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14194653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档