Sql 涉及res的复杂查询
我有如下表,我需要查询当天创建了多少任务,解决了多少任务,我需要捕获前一天以活动状态传递的任务。例如:TaskId 101于2014年11月10日创建,并于2014年11月12日解决,因此应在2014年11月11日和2014年11月12日的计数中显示Sql 涉及res的复杂查询,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有如下表,我需要查询当天创建了多少任务,解决了多少任务,我需要捕获前一天以活动状态传递的任务。例如:TaskId 101于2014年11月10日创建,并于2014年11月12日解决,因此应在2014年11月11日和2014年11月12日的计数中显示 TaskId CreateDate Status ResolvedDate 101 11/10/2014 Resolved 11/12/2014 102 11/10/2014 Resolved 11/10/2014 103 11/11/2014 A
TaskId CreateDate Status ResolvedDate
101 11/10/2014 Resolved 11/12/2014
102 11/10/2014 Resolved 11/10/2014
103 11/11/2014 Active NULL
104 11/11/2014 Resolved 11/13/2014
105 11/13/2014 Active 11/13/2014
请帮助我,因为我想不出任何解决办法。很抱歉,我试图以表格格式发布表格架构,但无法创建表格,我是这个论坛的新手 您可以使用基于案例的聚合来获得结果 CTE生成给定范围的日期列表 对于每一天,使用“案例”、“最大值”和“分组依据”计算当天创建的、以前创建但未解决的活动总量和当天解决的总量
@雷达,你刚刚给了我查询的希望,我改变了查询如下,它开始显示结果。但TotalActive显示的价值低于TotalCreated
declare @start_date datetime = getdate()-30
declare @end_date datetime = getdate()
;WITH CTE AS
(
SELECT @start_date AS date
UNION ALL
SELECT DATEADD(day, 1, date) as date
FROM CTE
WHERE DATEADD(day, 1, date) <= @end_date
)
select cte.date,
sum( case when CONVERT(varchar, CreateDate, 101) <= CONVERT(varchar, cte.date, 101) and CONVERT(varchar, cte.date, 101) <= CONVERT(varchar, ResolveDate, 101) then 1 else 0 end
) as TotalActive,
sum( case when CONVERT(varchar, cte.date, 101) = CONVERT(varchar, CreateDate, 101) then 1 else 0 end
) as TotalCreated,
sum( case when CONVERT(varchar, cte.date, 101) = CONVERT(varchar, ResolveDate, 101) then 1 else 0 end
) as TotalResolved
from cte
left join [WarehouseIncidents] T
ON CONVERT(varchar, CreateDate, 101) >= CONVERT(varchar, cte.date, 101)
GROUP BY CTE.DATE
你试过什么?看起来像是一个简单的案例说明,看看创建和解决日期就可以了。如果你真的要失业了,你应该在你的问题上多下点功夫。如果我不能理解你的意思,我就帮不了你。请展示一些样本数据和一些更多的样本结果。这将帮助你更快地得到答案。哪一天哪一天?就在今天跑步的日期?还是表中的每个日期?一年中的每一天?同样,不确定预期结果应该是什么…为什么不添加一个列,显示从创建到解析所用的时间?雷达-两列Totalactive、TotalResolved的查询计数均为零…@SayaramGattu,我将开始日期设为11月1日,看看10日、11日,也可以将开始日期更改为11月10日,如果你不从11月1日开始。请看这里@SayaramGattu,现在尝试为resolveddate处理空条件。
declare @start_date datetime = getdate()-30
declare @end_date datetime = getdate()
;WITH CTE AS
(
SELECT @start_date AS date
UNION ALL
SELECT DATEADD(day, 1, date) as date
FROM CTE
WHERE DATEADD(day, 1, date) <= @end_date
)
select cte.date,
sum( case when CONVERT(varchar, CreateDate, 101) <= CONVERT(varchar, cte.date, 101) and CONVERT(varchar, cte.date, 101) <= CONVERT(varchar, ResolveDate, 101) then 1 else 0 end
) as TotalActive,
sum( case when CONVERT(varchar, cte.date, 101) = CONVERT(varchar, CreateDate, 101) then 1 else 0 end
) as TotalCreated,
sum( case when CONVERT(varchar, cte.date, 101) = CONVERT(varchar, ResolveDate, 101) then 1 else 0 end
) as TotalResolved
from cte
left join [WarehouseIncidents] T
ON CONVERT(varchar, CreateDate, 101) >= CONVERT(varchar, cte.date, 101)
GROUP BY CTE.DATE