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
试一下
------解决思路----------------------
------解决思路----------------------
如果 dt 的字段类型为 datetime, (模拟数据 dt 字段类型为 varchar)
语句可写为:
select Convert(datetime, AVG(Convert(decimal(20, 10), dt)), 120) as dt from tbl
------解决思路----------------------
------解决思路----------------------
------解决思路----------------------
------解决思路----------------------
例如,一个月所有人到达地点的平均时间
姓名 时间
张三 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 /* 测试数据
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