sql怎的计算一个列的平均时间

sql怎样计算一个列的平均时间
例如,一个月所有人到达地点的平均时间
姓名                      时间
张三       2008-12-01 07:25:04.000,
李四       2008-12-02 07:13:45.000,
王二       2008-12-03 07:28:14.000,
赵五       2008-12-04 07:25:39.000,
赵一       2008-12-05 07:50:39.000,
赵二       2008-12-06 08:10:39.000,
赵三       2008-12-07 06:55:39.000,
赵四       2008-12-08 06:59:39.000,
问怎样求到达地点的平均时间?

------解决思路----------------------
SELECT
姓名,CAST(
SUBSTRING(T,1,4)+CAST(AVG(CAST(SUBSTRING(T,5,4)AS INT))OVER()AS VARBINARY(4))
AS DATETIME)AS[时间]
FROM(
SELECT 姓名,CAST(时间 AS VARBINARY(8))T
FROM TB
)T

试一下
------解决思路----------------------
WITH table1(姓名,时间)AS(
    SELECT '张三','2008-12-01 07:25:04.000' UNION ALL
    SELECT '李四','2008-12-02 07:13:45.000' UNION ALL
    SELECT '王二','2008-12-03 07:28:14.000' UNION ALL
    SELECT '赵五','2008-12-04 07:25:39.000' UNION ALL
    SELECT '赵一','2008-12-05 07:50:39.000' UNION ALL
    SELECT '赵二','2008-12-06 08:10:39.000' UNION ALL
    SELECT '赵三','2008-12-07 06:55:39.000' UNION ALL
    SELECT '赵四','2008-12-08 06:59:39.000' 
)
,t AS (
    SELECT DATEDIFF(second,'2008-12-01',时间) s
      FROM table1
)
SELECT DATEADD(second,AVG(s),'2008-12-01') 平均时间
  FROM t

平均时间
-----------------------
2008-12-04 19:26:09.000

------解决思路----------------------

WITH tbl(id, dt)AS(
    SELECT '张三','2008-12-01 07:25:04.000' UNION ALL
    SELECT '李四','2008-12-02 07:13:45.000' UNION ALL
    SELECT '王二','2008-12-03 07:28:14.000' UNION ALL
    SELECT '赵五','2008-12-04 07:25:39.000' UNION ALL
    SELECT '赵一','2008-12-05 07:50:39.000' UNION ALL
    SELECT '赵二','2008-12-06 08:10:39.000' UNION ALL
    SELECT '赵三','2008-12-07 06:55:39.000' UNION ALL
    SELECT '赵四','2008-12-08 06:59:39.000' 
)
select Convert(datetime, AVG(Convert(decimal(20, 10), Convert(datetime,dt))), 120) as dt from tbl



如果  dt  的字段类型为  datetime, (模拟数据 dt 字段类型为 varchar) 
语句可写为:

select Convert(datetime, AVG(Convert(decimal(20, 10), dt)), 120) as dt from tbl

------解决思路----------------------
WITH table1(姓名,时间)AS(
    SELECT '张三','2008-12-01 07:25:04.000' UNION ALL
    SELECT '李四','2008-12-02 07:13:45.000' UNION ALL
    SELECT '王二','2008-12-03 07:28:14.000' UNION ALL
    SELECT '赵五','2008-12-04 07:25:39.000' UNION ALL
    SELECT '赵一','2008-12-05 07:50:39.000' UNION ALL
    SELECT '赵二','2008-12-06 08:10:39.000' UNION ALL
    SELECT '赵三','2008-12-07 06:55:39.000' UNION ALL
    SELECT '赵四','2008-12-08 06:59:39.000' 
)
,t AS (
    SELECT cast(cast(时间 as datetime) as numeric(20,10))-datediff(dd,0,时间) s
      FROM table1
)
select substring(convert(varchar,convert(datetime,AVG(s)),120),12,8) from t

------解决思路----------------------
WITH TAB(姓名,时间)AS(
    SELECT '张三','2008-12-01 07:25:04.000' UNION ALL
    SELECT '李四','2008-12-02 07:13:45.000' UNION ALL
    SELECT '王二','2008-12-03 07:28:14.000' UNION ALL
    SELECT '赵五','2008-12-04 07:25:39.000' UNION ALL
    SELECT '赵一','2008-12-05 07:50:39.000' UNION ALL
    SELECT '赵二','2008-12-06 08:10:39.000' UNION ALL
    SELECT '赵三','2008-12-07 06:55:39.000' UNION ALL
    SELECT '赵四','2008-12-08 06:59:39.000' 
)
,Tab2 AS(
SELECT MIN(时间)OVER() MINTIME,DATEDIFF(second,MIN(时间)OVER(),时间) MI 
FROM TAB
)
SELECT DATEADD(second,AVG(MI),MIN(MINTIME)) FROM Tab2


------解决思路----------------------
引用:
都是with table 里面是select,我怎么换成我自己的列名???用我自己数据库中的数据呢? 

WITH /* 测试数据
table1(姓名,时间)AS(
    SELECT '张三',CONVERT(datetime,'2008-12-01 07:25:04.000',120) UNION ALL
    SELECT '李四','2008-12-02 07:13:45.000' UNION ALL
    SELECT '王二','2008-12-03 07:28:14.000' UNION ALL
    SELECT '赵五','2008-12-04 07:25:39.000' UNION ALL
    SELECT '赵一','2008-12-05 07:50:39.000' UNION ALL
    SELECT '赵二','2008-12-06 08:10:39.000' UNION ALL
    SELECT '赵三','2008-12-07 06:55:39.000' UNION ALL
    SELECT '赵四','2008-12-08 06:59:39.000' 
), */
t1 AS ( -- table1、时间 换成你实际的表名、列名
    SELECT CONVERT(float,时间) v
      FROM table1
)
,t2 AS (
    SELECT v-ROUND(v,0,1) s
      FROM t1
)
SELECT CONVERT(varchar(5),
               CONVERT(datetime,AVG(s)),
               8) 平均时间
  FROM t2

平均时间
--------
07:26

------解决思路----------------------
SELECT patient_bingzhong
,SUM(patient_sr)sr
,AVG(patient_age)age
,AVG(patient_numkeren)kr
,AVG(patient_numkefu)kf
,SUM(CASE WHEN patient_status='到院'THEN 1 ELSE 0 END)num_daoyuan
,SUM(CASE WHEN patient_yytime<>'1990-01-01 00:00:00.000'THEN 1 ELSE 0 END)num_yytime
,SUM(CASE WHEN patient_sex='true'THEN 1 ELSE 0 END)num_girl
,SUM(CASE WHEN patient_sex='False'THEN 1 ELSE 0 END)num_boy
,CONVERT(VARCHAR(5),
        CAST(0x00000000+CAST(AVG(CAST(SUBSTRING(CAST([时间列] AS VARBINARY(8)),5,4)AS INT))AS VARBINARY(4))AS DATETIME)
    ,108)AS[平均时间]
FROM hospital_patients
GROUP BY patient_bingzhong
ORDER BY num_daoyuan DESC
只要时和分的话,[时间列]换成你的列名