我正在计算一个人在成为付费会员之前的平均时间。
我试图选择创建的ID-日期-第一次付款的日期-创建和第一次付款之间的时间-创建和第一次付款之间的平均时间:
SELECT C.CompanyId, C.CreatedDate, CO.CreatedDate,
CAST(CO.CreatedDate - C.CreatedDate as int) AS 'Diff', FROM XXX.Company C
INNER JOIN -- some innerjoins--
WHERE -- Some conditions --前四个选择很好。
ID Date of creation Date of first payment 'Diff'
1 2013-12-29 00:00:00.000 2014-01-10 18:34:18.000 13
2 2013-12-09 00:00:00.000 2014-01-10 21:07:29.000 33
3 2013-12-12 00:00:00.000 2014-01-10 21:14:01.000 30我想添加AVG(Diff)作为我的选择查询的平均值。
SELECT C.CompanyId, C.CreatedDate, CO.CreatedDate,
CAST(CO.CreatedDate - C.CreatedDate as int) AS 'Diff', AVG(CAST(Diff as int)) AS Average FROM XXX.Company C
INNER JOIN -- some innerjoins--
WHERE -- Some conditions --,它提供“无效列名”。
我试着把它改成
SELECT C.CompanyId, C.CreatedDate, CO.CreatedDate,CAST(CO.CreatedDate - C.CreatedDate as int) AS 'Diff', AVG(CAST(CO.CreatedDate - C.CreatedDate as int)) AS Average FROM XXX.Company C它使以下错误列在select列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。
因此,简单地说,我如何才能获得我的演员的AVG()作为区分呢?
解决方案
我使用了DATEDIFF datediff.asp
DATEDIFF(DATEDIFF,C.CreatedDate,CO.CreatedDate)以删除不同的日期时间值,并得到其周围的差异并使用AVG :AVG(DATEDIFF(DATEDIFF,C.CreatedDate,CO.CreatedDate))
发布于 2014-05-13 12:07:29
我不知道该怎么回答我的问题。但我找到了解决办法:
我使用了DATEDIFF datediff.asp
DATEDIFF(DATEDIFF,C.CreatedDate,CO.CreatedDate)以删除不同的日期时间值,并得到其周围的差异并使用AVG :AVG(DATEDIFF(DATEDIFF,C.CreatedDate,CO.CreatedDate))
mods,请关闭此主题:)
发布于 2014-05-13 10:22:37
您必须按某些值进行分组,以便让数据库知道应用avg的位置:
SELECT C.CompanyId
, AVG(CAST(CO.CreatedDate - C.CreatedDate as int)) AS Average
FROM XXX.Company C
GROUP
BY C.CompanyId另外,你的平均和差异是相互冲突的,所以你必须禁用这个转换。
如果希望对公司中的所有行进行分组,并且创建两个日期字段,则:
SELECT C.CompanyId
, C.CreatedDate
, CO.CreatedDate
, CAST(CO.CreatedDate - C.CreatedDate as int) AS 'Diff'
, AVG(CAST(CO.CreatedDate - C.CreatedDate as int)) AS Average
FROM XXX.Company C
GROUP
BY C.CompanyId
, C.CreatedDate
, CO.CreatedDate发布于 2014-05-13 10:23:17
就目前情况而言,您需要在CAST(...)中重复AVG(),即CAST() as Diff, AVG(CAST(...)) as Average.
您可以避免重复,并通过将CAST查询包装到内部派生表中,然后将AVG聚合应用于该派生表,如下所示:
SELECT CompanyId, CreatedDate, CreatedDate, AVG(CAST(Diff as int)) AS Average
FROM
(
SELECT C.CompanyId, C.CreatedDate, CO.CreatedDate,
CAST(CO.CreatedDate - C.CreatedDate as int) AS 'Diff'
FROM XXX.Company C
INNER JOIN -- some innerjoins--
WHERE -- Some conditions --
) x;https://stackoverflow.com/questions/23628530
复制相似问题