可以说我有如下表:的时间差平均和分组在SQL
User | Date_start | Date_End | Task
----------------------------------------
Al | 1/11/17 | 1/14/17 | Dishes
Al | 1/09/17 | 1/15/17 | Paint
Al | 1/11/17 | 1/14/17 | Dishes
Al | 1/18/17 | 1/20/17 | Paint
Todd | 1/11/17 | 1/14/17 | Dishes
Al | 1/11/17 | 1/21/17 | Dishes
Todd | 1/10/17 | 1/17/17 | Paint
Todd | 1/11/17 | 1/14/17 | Dishes
Todd | 1/11/17 | 1/14/17 | Paint
Al | 1/11/17 | NULL | Dishes
我所试图做的是普通的日子在任务栏通过完成任务
并且清楚它们分组任务。但是,如果记录尚未完成(如'null'所示),我想从平均计算中排除此记录。此外,我试图通过任务对它们进行唯一计数(同样,忽略date_end'null'值的记录)。我希望得到一个输出像这样(下称“平均”数字是绝对关闭,仅用于演示):
User | Count_of_Task | AVG_Time_to_Finish_In_Days | Task
-----------------------------------------------------------
Al | 3 | 4.2 | Dishes
Al | 2 | 4.0 | Paint
Todd | 2 | 2.6 | Dishes
Todd | 2 | 6.1 | Paint
我使用下面的SQL:
Select s.user,
COUNT(s.task) as count_of_task,
AVG(DATEDIFF(dd,s.date_start,s.date_end)*1.0) as avg_time_to_finish_in_days,
s.task
FROM dbo.stuff s
WHERE S.DATE_END IS NOT null
GROUP by s.task,
s.user
HAVING AVG(DATEDIFF(dd,s.date_start,s.date_end)*1.0) <> 0
and COUNT(s.task) <> 0
此SQL不正确地分组任务并截断平均时间完成,给我平均值为0的小数(即6.000000)。
我正在使用SQL Server 2014.
任何帮助将不胜感激!
你使用的是mysql还是sql-server? –
只是sql-server。我将删除另一个标签 –
因此,您需要一个'WHERE Date_end IS NOT NULL'。 – user3741598