SQL 计算 DATEDIFF 的平均值的查询
SQL Query to calculate the AVG of DATEDIFF
我正在尝试编写一个查询,为我提供 AVG
的 Datediff
我有一个类似的查询,我正在尝试用我的新查询复制它,它是:
SELECT DATENAME(MONTH, d.OPENED) AS MonthValue,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN
1 ELSE 0 END) AS SmallCommercialIndust,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN 1
ELSE 0 END) AS Residential
FROM hb_Disputes d
WHERE YEAR(d.OPENED) = YEAR(GETDATE())
GROUP BY DATENAME(MONTH, d.OPENED)
ORDER BY MIN(d.OPENED);
这是我的输出:
Month Value Small Commercial Indust Residential
----------------------------------------------------
January 0 0
February 0 0
March 1 0
April 0 2
May 0 1
June 0 1
July 1 0
August 1 0
September 0 1
October 1 0
November 1 0
December 0 1
下面是我正在尝试创建的 Query
,它采用相同的信息,但在需要 d.OPENS
的地方添加了一个额外的组件,并将其减去 d.DATERLVD
并为我提供本月 AVG
:
SELECT DATENAME(MONTH, d.OPENED) AS MonthValue,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN 1
ELSE 0 END AND AVG(DATEDIFF(day, d.OPENED, d.DATERLVD)) AS
SmallCommercialIndust,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN 1
ELSE 0 END AND AVG(DATEDIFF(day, d.OPENED, d.DATERLVD)) AS
Residential
FROM hb_Disputes d
WHERE YEAR(d.OPENED) = YEAR(GETDATE())
GROUP BY DATENAME(MONTH, d.OPENED)
ORDER BY MIN(d.OPENED);
为什么要在 SELECT
子句中使用 AND
?我想你想要:
SELECT DATENAME(MONTH, d.OPENED) AS MonthValue,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN 1 ELSE 0 END) as SmallCommercialIndust,
AVG(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN DATEDIFF(day, d.OPENED, d.DATERLVD) END) AS SmallCommercialIndust_avg,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN 1 ELSE 0 END) as Residential,
AVG(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN DATEDIFF(day, d.OPENED, d.DATERLVD) END) AS Residential_avg
FROM hb_Disputes d
了解如何正确设置代码格式。你可以清楚地看到你把括号放错了。
SELECT DATENAME(MONTH, d.OPENED) AS MonthValue
, SUM(
CASE
WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN 1
ELSE 0
END
AND
AVG(DATEDIFF(day, d.OPENED, d.DATERLVD)
) AS SmallCommercialIndust
, SUM(
CASE
WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN 1
ELSE 0
END
AND AVG(DATEDIFF(day, d.OPENED, d.DATERLVD)
) AS Residential
FROM hb_Disputes d
WHERE YEAR(d.OPENED) = YEAR(GETDATE())
GROUP BY DATENAME(MONTH, d.OPENED)
ORDER BY MIN(d.OPENED);
我正在尝试编写一个查询,为我提供 AVG
的 Datediff
我有一个类似的查询,我正在尝试用我的新查询复制它,它是:
SELECT DATENAME(MONTH, d.OPENED) AS MonthValue,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN
1 ELSE 0 END) AS SmallCommercialIndust,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN 1
ELSE 0 END) AS Residential
FROM hb_Disputes d
WHERE YEAR(d.OPENED) = YEAR(GETDATE())
GROUP BY DATENAME(MONTH, d.OPENED)
ORDER BY MIN(d.OPENED);
这是我的输出:
Month Value Small Commercial Indust Residential
----------------------------------------------------
January 0 0
February 0 0
March 1 0
April 0 2
May 0 1
June 0 1
July 1 0
August 1 0
September 0 1
October 1 0
November 1 0
December 0 1
下面是我正在尝试创建的 Query
,它采用相同的信息,但在需要 d.OPENS
的地方添加了一个额外的组件,并将其减去 d.DATERLVD
并为我提供本月 AVG
:
SELECT DATENAME(MONTH, d.OPENED) AS MonthValue,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN 1
ELSE 0 END AND AVG(DATEDIFF(day, d.OPENED, d.DATERLVD)) AS
SmallCommercialIndust,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN 1
ELSE 0 END AND AVG(DATEDIFF(day, d.OPENED, d.DATERLVD)) AS
Residential
FROM hb_Disputes d
WHERE YEAR(d.OPENED) = YEAR(GETDATE())
GROUP BY DATENAME(MONTH, d.OPENED)
ORDER BY MIN(d.OPENED);
为什么要在 SELECT
子句中使用 AND
?我想你想要:
SELECT DATENAME(MONTH, d.OPENED) AS MonthValue,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN 1 ELSE 0 END) as SmallCommercialIndust,
AVG(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN DATEDIFF(day, d.OPENED, d.DATERLVD) END) AS SmallCommercialIndust_avg,
SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN 1 ELSE 0 END) as Residential,
AVG(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN DATEDIFF(day, d.OPENED, d.DATERLVD) END) AS Residential_avg
FROM hb_Disputes d
了解如何正确设置代码格式。你可以清楚地看到你把括号放错了。
SELECT DATENAME(MONTH, d.OPENED) AS MonthValue
, SUM(
CASE
WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN 1
ELSE 0
END
AND
AVG(DATEDIFF(day, d.OPENED, d.DATERLVD)
) AS SmallCommercialIndust
, SUM(
CASE
WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN 1
ELSE 0
END
AND AVG(DATEDIFF(day, d.OPENED, d.DATERLVD)
) AS Residential
FROM hb_Disputes d
WHERE YEAR(d.OPENED) = YEAR(GETDATE())
GROUP BY DATENAME(MONTH, d.OPENED)
ORDER BY MIN(d.OPENED);