我在做一个考勤系统。在代码中:
SELECT
c.gregorian_date,
c.WORKING_DAY,
c.notes,
a.am_empno AS emp_no,
t.emp_name,
a.Time_In,
a.Time_Out,
a.am_att_status,
t.team_name,
t.line_manager,
(SELECT COUNT(a2.Time_In)
FROM pp_emp_att_mst_v a2
WHERE a2.am_empno = a.am_empno
AND a2.Time_In >= '09:15:00'
AND a2.am_date BETWEEN TRUNC(SYSDATE, 'mm') AND TRUNC(SYSDATE)
) AS Time_In_MTD,
**-- Here I want AVG(a.Time_In)**
FROM
dim_calendar c
JOIN pp_emp_att_mst_v a ON c.gregorian_date = a.am_date AND a.am_date = TRUNC(SYSDATE)
JOIN team_names t ON a.am_empno = t.EMP_NO
WHERE
c.gregorian_date = TRUNC(SYSDATE)
AND a.Time_In >= '09:15:00'
AND c.gregorian_date BETWEEN TRUNC(SYSDATE, 'mm') AND TRUNC(SYSDATE)
我想得到平均时间。
我也在SSRS报告中使用这个查询,所以如果有一种方法可以在SSRS报告中获得平均时间,请分享。
2条答案
按热度按时间vlju58qv1#
您需要将时间转换为数值,然后可以对其进行平均并将其转换回时间。假设你想要一个相似的平均值为每个员工为当前月份,那么你可以使用:用途:
kx7yvsdv2#
time_in
列的数据类型是什么?根据你发布的内容,看起来像一个字符串:AND a.Time_In >= '09:15:00'
如果确实如此,请考虑将日期(和时间)值存储在
date
或timestamp
数据类型列中;如果它是varchar2
,你可以有,例如。45:82:92
存储在那里,这不是一个有效的时间值。如果是例如。date
数据类型,数据库不会让你将这样的垃圾存储到列中。无论如何:假设这真的是一个字符串,然后将其转换为时间戳(以便提取函数完成其工作),将小时乘以60(以便您获得分钟)并添加分钟本身。计算平均分钟数,并将该数字转换回小时:分钟格式。
样本数据:
查询方式:
是这样吗?
如果
time_in
存储在date
数据类型列中,您将执行类似的操作:首先将日期转换为时间戳,其余部分如上例所示。样本数据:
查询方式: