【发布时间】:2016-05-04 14:29:38
【问题描述】:
我遇到了一个问题,我正在针对数据库运行脚本以获取需要转换为 DateTimes 的多个 VARCHAR 之间的平均差异,然后取所有结果之间的平均值。
我的代码是:
SELECT YEAR(b.DateAcknow),AVG(datediff(dd,convert(datetime,b.DateAssign),
convert(datetime,b.DateResolv))) as DayAverage,
AVG(datediff(hh,convert(datetime,b.TimeAcknow),
convert(datetime,b.TimeResolv))) as HourAverage
FROM table AS b
WHERE (x = y)
AND YEAR(DateResolv) >= 2006
AND YEAR(DateResolv) < 2016
AND b.resolution <>''
GROUP BY YEAR(b.DateAcknow)
ORDER BY YEAR(b.DateAcknow)`
我得到的结果似乎没有意义,更不用说它包含 1900 了,它超出了我的 where 子句的参数
这里是:
NULL 42 NULL
1900 0 12
2006 7 -5
2007 6 1
2008 7 1
2009 4 1
2010 2 0
2011 2 0
2012 2 0
2013 2 0
2014 2 0
2015 2 0
我将VARCHARs 转换错了吗?
我怀疑 2010 年至 2015 年的数千个条目的平均值是否都相同 2 天 0 小时,所以要么我做错了什么,要么数据不好。
【问题讨论】:
-
我不确定你的意思。我的目的是显示每年的平均响应时间(以天和小时为单位)。
-
如果没有示例数据,就很难看出发生了什么……难道自 2010 年以来所有日期都存储为空时间戳?这可以解释 0 小时的差异。至于天数,如果管理层希望在 2 天后关闭呼叫,很可能大多数都是这样,导致平均 2 天(如果您平均整数,我不知道 AVG 是否返回除 int 之外的任何内容? )
-
另外,虽然您的措辞似乎暗示了这一点,但您的日子和时间并不属于同一时间跨度。
-
@oerkelens 尽管它们是两个独立的字段,但它们的时间跨度相同。一个只是日期(DateAssign-DateResolv),另一个只是 24 小时制时间(TimeAcknow-TimeResolv)。
-
那么 DateAssign 和 DateAcknow 一样吗?否则,它们是两个不同的时间跨度,一个以天表示,另一个以小时表示。请注意,小时数应该返回总小时数,不是时间跨度的“小时”部分(因此两天为 48 小时)。
标签: sql datetime varchar datediff