获取每天打开问题的平均天数(SQL)
我试图在PowerBI中创建一个图表,显示两个日期之间每个给定时间数据库中问题的平均打开天数获取每天打开问题的平均天数(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', '
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);