最佳做法问题。我有DATED, AgentName, Available_Time (DATETIME)
的表格。日期不是连续的,例如缺少所有周末,同样AgentName
每天都不存在。
我想在给定的日期范围内获得每位用户的SUM
和AVG
。目前,我有一个Cursor,遍历所有可用日期,其中是另一个光标遍历该日期的所有名称。我本来希望使用SUM(COLUMN)
,但你不能用DATETIME
来做COLUMN + COLUMN
。TIME
我尝试转换为CTE
,除了一次超过24小时后它回滚到00:00:000我就失去了时间。我在考虑sum
,但仍然无法使用if OBJECT_ID('tempdb..#RESULTS') is not null
drop table #RESULTS;
CREATE TABLE #RESULTS (AgentName NVARCHAR(100)
,DATED DATE
,Available_Time DATETIME
)
INSERT INTO #RESULTS
VALUES
('007','1/1/2018','1900/01/01 02:33:51')
,('007','1/2/2018','1900/01/01 00:32:37')
,('007','1/3/2018','1900/01/01 01:02:54')
,('007','1/4/2018','1900/01/01 01:22:14')
,('007','1/5/2018','1900/01/01 01:48:42')
,('007','1/7/2018','1900/01/01 01:16:07')
,('007','1/9/2018','1900/01/01 02:25:56')
,('007','1/11/2018','1900/01/01 02:00:09')
,('007','1/13/2018','1900/01/01 12:36:01')
,('007','1/15/2018','1900/01/01 11:56:25')
,('K','1/11/2018','1900/01/01 02:00:09')
,('K','1/13/2018','1900/01/01 12:36:01')
,('K','1/15/2018','1900/01/01 11:56:25')
if OBJECT_ID('tempdb..#RESULTS2') is not null
drop table #RESULTS2;
CREATE TABLE #RESULTS2 (RNUMBER INT
,AgentName NVARCHAR(100)
--,DATED DATE
,Available_Time DATETIME
)
INSERT INTO #RESULTS2
SELECT ROW_NUMBER() OVER (PARTITION BY AGENTNAME ORDER BY DATED) RNUM
,AgentName
--,DATED
,Available_Time
from #RESULTS
;
WITH DATEAGG AS
(SELECT *
FROM #RESULTS2
)
SELECT d.AgentName
,d.Available_Time + d2.Available_Time - '1900-01-01 00:00:00.000'
FROM DATEAGG d
LEFT JOIN DATEAGG d2
on d.AgentName = d2.AgentName
and d.RNUMBER = d2.RNUMBER +1
。下面的代码基本上模拟它,但显然给我行不是总和。数据集很小,因此光标不是问题,我只是不喜欢它们:)。想法?
Agent | Total Time
007 | 1900/01/02 11:54:23
K | 1900/01/01 01:54:23
所以最终输出(这不正确但是)看起来像是:
Agent | Total Time
007 | 2D 11:54:23
K | 0D 01:54:23
从那里我可以很容易地DATEDIFF(ss,1900/01/01,RESULT)并获得总时间。 最后的答案会是这样的(取决于我的格式)
var someFunction = function() {};
(function() {
$('.owl-carousel').owlCarousel({
center: true,
items: 1,
loop: true,
margin: 10,
nav: true,
autoplay: true,
autoplayTimeout: 3000,
animateOut: 'fadeOut',
dots: true,
navText: ["<i class='fa fa-angle-left'></i>", "<i class='fa fa-angle-right'></i>"]
})
})();
someFunction();
答案 0 :(得分:1)
DateTime数据类型用于存储时间点,而不是时间量或持续时间。试图将持续时间(或时间量)存储为日期时间会导致您遇到的那种混乱。
时间量是一个数字。将其存储在数据库中的最佳方法是存储一个整数,其中包含您感兴趣的最低细分时间。在你的情况下,它看起来像秒。因此,不应存储包含“1900/01/01 00:01:00”的DateTime,而应存储包含“60”的整数。
然后很容易SUM,AVG或者你想要的任何其他数学运算,当需要在Days,Hours,Minutes和Seconds表达结果时,你可以在查询时进行数学和字符串格式化。 / p>