2017-05-06 63 views
0

我试图让每个分店的平均分钟接收时间。在两分钟之间获得平均差分

我有两个表订单和ReceivedOrders。

订单

OrderID OutletID OrderDate 
1  1  2017-04-10 17:04:41.000 

ReceivedOrders

ReceivingID OrderID ReceivingDate 
1   1  2017-04-10 17:06:31.000 

我曾尝试下面的查询,但它的重播零作为平均接收时间

SQL查询

SELECT  Outlets.OutletName , avg(datediff(MM, Orders.OrderDate, ReceivedOrders.ReceivingDate)) as Receive 
FROM   dbo.Orders INNER JOIN 
       dbo.Outlets ON dbo.Orders.OutletID = dbo.Outlets.OutletID INNER JOIN 
       dbo.ReceivedOrders ON dbo.Orders.OrderID = dbo.ReceivedOrders.OrderID 
group by dbo.Outlets.OutletName 

输出

OutletName Receive 
Outlet1 0 

回答

1

使用DATEDIFF毫秒选项:

select Outlets.OutletName, 
    avg(datediff(ms, Orders.OrderDate, ReceivedOrders.ReceivingDate))/60000 as Receive 
from dbo.Orders 
inner join dbo.Outlets on dbo.Orders.OutletID = dbo.Outlets.OutletID 
inner join dbo.ReceivedOrders on dbo.Orders.OrderID = dbo.ReceivedOrders.OrderID 
group by dbo.Outlets.OutletName 
0

你的代码是做正是您指定的内容。您在而不是分钟获得日期差异。

当使用日期部分,只拼出日期部分的全名:两个值之间

SELECT ol.OutletName, 
     avg(datediff(minute, o.OrderDate, ro.ReceivingDate)) as Receive 
FROM dbo.Orders o INNER JOIN 
    dbo.Outlets ol 
    ON o.OutletID = ol.OutletID INNER JOIN 
    dbo.ReceivedOrders ro 
    ONo.OrderID = ro.OrderID 
GROUP BY ol.OutletName; 

上述计数分界限。您可能需要几分钟的时间,在这种情况下,我会使用较小的单位。毫秒绝对是一种选择,但如果日期相隔几个月,它们可以很容易地溢出。所以,你可能真的想要更多的东西是这样的:

SELECT ol.OutletName, 
     avg(datediff(second, o.OrderDate, ro.ReceivingDate)/60.0) as minutesToReceive 
FROM dbo.Orders o INNER JOIN 
    dbo.Outlets ol 
    ON o.OutletID = ol.OutletID INNER JOIN 
    dbo.ReceivedOrders ro 
    ONo.OrderID = ro.OrderID 
GROUP BY ol.OutletName; 

注意使用60.0,而不是60迫使非整数运算。

相关问题