【发布时间】:2014-09-02 22:35:06
【问题描述】:
下表有 Key 和 StartTime 和 EndTime。我希望我的查询返回我的键、具有此键的记录数以及具有相同键的所有记录的总分钟数。我不能在我的组中没有 StartTime 和 EndTime 的情况下运行,不幸的是,这组每一行都有不同的开始或停止时间。
SELECT sn.Key,
COUNT(*) as SessonNoteCount,
sum( dbo.fnCalcTime( sn.StartTime, sn.EndTime)) as min
FROM SessionNote sn
group by sn.Key, sn.StartTime, sn.EndTime
order by sn.Key
【问题讨论】:
-
为什么在
GROUP BY子句中没有sn.StartTime和sn.EndTime就不能运行?在我看来,你可以。但是,正如您所知,使用该功能可以获得非常糟糕的性能。如果您想使用函数抽象时间计算并获得合理的性能,它需要是一个RETURNS TABLE函数,其中包含单个SELECT语句,创建WITH SCHEMABINDING并像Sum( (SELECT Elapsed FROM dbo.fnCalcTime(sn.STartTime, sn.EndTime)) )一样使用。这将允许解析器内联函数体。
标签: sql