计算每天两个日期时间字段之间的平均时差

时间:2014-08-01 06:18:50

标签: sql tsql date datetime

我有一个出租车数据库,有两个日期时间字段'BookedDateTime'和'PickupDateTime'。客户需要知道从预订出租车到驾驶员实际“接载”客户的平均等待时间。

数据库中有一堆行,涵盖了几个月的数据。

目标是制作一个向我显示每日平均值的查询。

所以一个非常简单的例子是:

BookedDateTime           | PickupDateTime
2014-06-09 12:48:00.000    2014-06-09 12:45:00.000
2014-06-09 12:52:00.000    2014-06-09 12:58:00.000    
2014-06-10 20:23:00.000    2014-06-10 20:28:00.000
2014-06-10 22:13:00.000    2014-06-10 22:13:00.000

2014-06-09((-3 + 6)/ 2)=平均时间为00:03:00.000(3分钟)

2014-06-10((5 + 0)/ 2)=平均值为00:02:30.000(2.5分钟)

这是可能的还是我需要在代码中进行一些数字处理(即C#)?

任何指针都会非常感激。

4 个答案:

答案 0 :(得分:4)

我认为这样做:

select Convert(date, BookedDateTime) as Date, AVG(datediff(minute, BookedDateTime, PickupDateTime)) as AverageTime
    from tablename 
    group by Convert(date, BookedDateTime)  
    order by Convert(date, BookedDateTime) 

答案 1 :(得分:2)

使用预订时间当天作为报告日期:

select
    convert(date, BookedDateTime) as day,
    AVG(DATEDIFF(minute, PickupDateTime, BookedDateTime)) as avg_minutes
from bookings
group by convert(BookedDateTime, datetime, 101) 

答案 2 :(得分:1)

请尝试:

IF OBJECT_ID(N'tempdb..#TEMP') > 0
    BEGIN
       DROP TABLE #TEMP
    END
CREATE TABLE #TEMP(BookedDateTime DateTime,
                PickupDateTime DateTime)
INSERT INTO #TEMP
VALUES
('2014-06-09 12:48:00.000', '2014-06-09 12:45:00.000'),
('2014-06-09 12:52:00.000', '2014-06-09 12:58:00.000'), 
('2014-06-10 20:23:00.000', '2014-06-10 20:28:00.000'),
('2014-06-10 22:13:00.000', '2014-06-10 22:13:00.000'),
('2014-06-10 23:59:00.000', '2014-06-11 00:01:00.000')

SELECT CAST(BookedDateTime AS DATE) AS YMDDate,
      CONVERT(CHAR(8), DATEADD(second, AVG(DATEDIFF(s, BookedDateTime, PickupDateTime)), 0), 108) [hh:mi:ss],
      CONVERT(CHAR(15), DATEADD(second, AVG(DATEDIFF(s, BookedDateTime, PickupDateTime)), 0), 114) [hh:mi:ss:mmm(24h)]
FROM #TEMP
GROUP BY CAST(BookedDateTime AS DATE)

答案 3 :(得分:0)

这可以通过找出每一行的差异,将它们相加并除以行数来完成。

在SQLSERVER中,它将如下所示。

SELECT SUM(DATEDIFF(MINUTE,BookedDateTime,PickupDateTime)) * 1.0 
           / (SELECT COUNT(*) * 1.0 FROM MyTable)
FROM MyTable