获取每天打开问题的平均天数(SQL)

获取每天打开问题的平均天数(SQL),sql,sql-server,tsql,powerbi,Sql,Sql Server,Tsql,Powerbi,我试图在PowerBI中创建一个图表,显示两个日期之间每个给定时间数据库中问题的平均打开天数 CREATE TABLE Issues (IssueID int,IssueName varchar(10),created datetime, closed datetime); INSERT INTO Issues VALUES (1,'a','2012-01-01 00:00:00', '2012-05-01 00:00:00'), (2,'b','2012-03-01 00:00:00', '

我试图在PowerBI中创建一个图表,显示两个日期之间每个给定时间数据库中问题的平均打开天数

CREATE TABLE Issues
(IssueID int,IssueName varchar(10),created datetime, closed datetime);

INSERT INTO Issues
VALUES
(1,'a','2012-01-01 00:00:00', '2012-05-01 00:00:00'),
(2,'b','2012-03-01 00:00:00', '2012-06-01 00:00:00');
我的第一个查询显示数据库中的所有数据:

SELECT IssueID,
DATEDIFF(DAY,created,ISNULL(closed,GETDATE())) AS 'Days_Open'
FROM Issues
结果:

 IssueID    Days_Open
    1           4
    2           3
我想找到的是每天的问题,当天的问题和平均天数

DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME

SET @StartDate = '2012-01-01'
SET @EndDate = '2012-07-01'
例: 每天开放的问题

Date         IssueID    Days_Open
2012-01-01      1           0
2012-02-01      1           1
2012-03-01      1           2
2012-03-01      2           0
2012-04-01      1           3
2012-04-01      2           1
2012-05-01      1           4
2012-05-01      2           2
2012-06-01      2           3
Day 07 has no issues
平均值

Date         Average_Days_Open
2012-01-01      0 (1 issue just created)
2012-02-01      1 (1 issue - 1 day old)
2012-03-01      1 (2 issues - (2+0)/2 = 1)
2012-04-01      2 (2 issues - (3+1)/2 = 2)
2012-05-01      3 (2 issues - (4+2)/2 = 3)
2012-06-01      3 (1 issue - (0+3)/1 = 3)
2012-07-01      0 (Since there were no issues that day)
如果我可以从这两个方面获得数据,那么我应该能够在PowerBi中创建类似以下内容的折线图:


有人能帮忙吗?

根据语法,我猜是SQL Server:

1) 查询:


您尝试过查询了吗?您要求的是一个相当困难的查询。“
选择IssueID,DATEDIFF(DAY,created,ISNULL(closed,GETDATE())作为问题的“Days\u Open”
”->
GETDATE()
SQL server日期函数不是MySQL日期函数吗?@TimBiegeleisen是的,对于初学者来说可能相当困难。但一旦你们有了日历桌,它就很漂亮了straighfoward@lad2025哥们……我不敢相信你居然回答了;)是的…我正要在另一个问题中发布一些东西…当这种情况发生时,我恨。因此开发人员没有花足够的时间学习堆栈溢出。一个问题是:数据流可以反转吗?在问题表中进行FROM查询搜索并右键连接CTE_DatesTable?
WITH CTE_DatesTable
AS
(
  SELECT CAST('20120101' as datetime) AS [date]
  UNION ALL
  SELECT DATEADD(dd, 1, [date])
  FROM CTE_DatesTable
  WHERE DATEADD(dd, 1, [date]) <= '20120106'
)
SELECT [date] , i.IssueId,  DATEDIFF(DAY,i.created,d.[date]) AS Days_Open
FROM CTE_DatesTable d
JOIN Issues i
  ON d.date BETWEEN i.created AND i.closed
ORDER BY [date], IssueId
OPTION (MAXRECURSION 0);
WITH CTE_DatesTable
AS
(
  SELECT CAST('20120101' as datetime) AS [date]
  UNION ALL
  SELECT DATEADD(dd, 1, [date])
  FROM CTE_DatesTable
  WHERE DATEADD(dd, 1, [date]) <= '20120106'
)
SELECT [date] ,AVG( DATEDIFF(DAY,i.created,d.[date]))
FROM CTE_DatesTable d
JOIN Issues i
  ON d.date BETWEEN i.created AND i.closed
GROUP BY [date]
ORDER BY [date]
OPTION (MAXRECURSION 0);
WITH CTE_DatesTable
AS
(
  SELECT CAST('20120101' as datetime) AS [date]
  UNION ALL
  SELECT DATEADD(dd, 1, [date])
  FROM CTE_DatesTable
  WHERE DATEADD(dd, 1, [date]) <= '20120107'
)
SELECT [date] , COALESCE(AVG( DATEDIFF(DAY,i.created,d.[date])),0)
FROM CTE_DatesTable d
LEFT JOIN Issues i
  ON d.date BETWEEN i.created AND i.closed
GROUP BY [date]
ORDER BY [date]
OPTION (MAXRECURSION 0);