如何获得Oracle中两个时间戳之间的平均值
我需要您的一些帮助。如何获得Oracle中两个时间戳之间的平均值
下面的SQL语句应该用于获取两个时间戳(e.p_ende和e.p_start之间的差异)之间的计算的毫秒数。 计算工作到目前为止。 当我在时间戳上只使用一个过滤器时,它也正在工作。
但我需要两个时间戳之间的值的平均值(lz)。如果我使用这两个语句,结果始终为空。
我的第一个声明是这样的:
SELECT AVG(LZ)
FROM ORGANIZATION.V_UI_LOG_SEND A,
(SELECT E.P_ID, (EXTRACT(DAY FROM E.P_ENDE)*24*60*60*1000
+EXTRACT(HOUR FROM E.P_ENDE) *60*60*1000
+EXTRACT(MINUTE FROM E.P_ENDE) *60*1000
+EXTRACT(SECOND FROM E.P_ENDE) *1000)
-(EXTRACT(DAY FROM E.P_START)*24*60*60*1000
+EXTRACT(HOUR FROM E.P_START)*60*60*1000
+EXTRACT(MINUTE FROM E.P_START)*60*1000
+EXTRACT(SECOND FROM E.P_START)*1000)AS LZ
FROM ORGANIZATION.V_UI_LOG_RECEIVE E) E
WHERE E.P_ID = A.UI_ID
AND A.P_START >= TO_DATE('20170327070000', 'YYYYMMDDHH24MISS')
AND A.P_START <= TO_DATE('20170327090000', 'YYYYMMDDHH24MISS');
...和第二条带间,像这样:
`SELECT AVG(ECHTLZ)
FROM ORGANIZATION.V_UI_LOG_SEND A,
(SELECT E.P_ID, (EXTRACT(DAY FROM E.P_ENDE)*24*60*60*1000
+EXTRACT(HOUR FROM E.P_ENDE) *60*60*1000
+EXTRACT(MINUTE FROM E.P_ENDE) *60*1000
+EXTRACT(SECOND FROM E.P_ENDE) *1000)
-(EXTRACT(DAY FROM E.P_START)*24*60*60*1000
+EXTRACT(HOUR FROM E.P_START)*60*60*1000
+EXTRACT(MINUTE FROM E.P_START)*60*1000
+EXTRACT(SECOND FROM E.P_START)*1000)AS ECHTLZ
FROM ORGANIZATION.V_UI_LOG_RECEIVE E) E
WHERE E.P_ID = A.UI_ID
AND A.P_START between TO_DATE('20170327070000',
'YYYYMMDDHH24MISS')
AND TO_DATE('20170327090000', 'YYYYMMDDHH24MISS');`
感谢您的阅读和帮助! :)
编辑:
非常感谢大家!解决方案要容易得多。我连接到错误的数据库。这张桌子在那里存在,名字相同,但没有数据......第一个声明一直在正常工作。我很抱歉花费您的宝贵时间!
请尝试使用以下提到的代码
SELECT AVG(ECHTLZ)
FROM ORGANIZATION.V_UI_LOG_SEND A,
(SELECT E.P_ID,
(E.P_ENDE -E.P_START)*60*24*60 AS ECHTLZ
FROM ORGANIZATION.V_UI_LOG_RECEIVE E
) E
WHERE E.P_ID = A.UI_ID
AND A.P_START BETWEEN TO_DATE('20170327070000', 'YYYYMMDDHH24MISS') AND TO_DATE('20170327090000', 'YYYYMMDDHH24MISS')
这将在几秒钟内给平均
如果列时间戳然后使用TO_TIMESTAMP()代替TO_DATE()
什么这个查询产生了吗?
SELECT DISTINCT A.UI_ID
FROM ORGANIZATION.V_UI_LOG_SEND A
WHERE A.P_START >= TO_TIMESTAMP('20170327070000', 'YYYYMMDDHH24MISS')
AND A.P_START <= TO_TIMESTAMP('20170327090000', 'YYYYMMDDHH24MISS');
如果没有行,以满足时间戳范围内,那么如果有从该查询行,则请他们匹配的行中的其他视图整个查询将NULL
?
SELECT DISTINCT A.UI_ID
FROM ORGANIZATION.V_UI_LOG_SEND A
INNER JOIN ORGANIZATION.V_UI_LOG_RECEIVE E ON E.P_ID = A.UI_ID
WHERE A.P_START >= TO_TIMESTAMP('20170327070000', 'YYYYMMDDHH24MISS')
AND A.P_START <= TO_TIMESTAMP('20170327090000', 'YYYYMMDDHH24MISS');
如果有从该查询行那么你平均计算也应该工作,虽然你必须要满足空值。(+ EDIT)
SELECT E.P_END, E.P_START
FROM ORGANIZATION.V_UI_LOG_SEND A
INNER JOIN ORGANIZATION.V_UI_LOG_RECEIVE E ON E.P_ID = A.UI_ID
WHERE A.P_START >= TO_TIMESTAMP('20170327070000', 'YYYYMMDDHH24MISS')
AND A.P_START <= TO_TIMESTAMP('20170327090000', 'YYYYMMDDHH24MISS')
AND (E.P_END IS NOT NULL AND E.P_START IS NOT NULL);
如果这个返回的数据那么你平均计算也应该工作。
谢谢您的帮助,解决的办法是要容易得多。我使用了错误的数据库连接-.-!” '和A.P_START> = TO_DATE(:QUERYDATUM1, 'YYYYMMDDHH24MISS') AND A.P_START xTex
很容易假设复杂的位是失败的项目,回到基础常常帮助我们重新聚焦......如果该列是时间戳,请使用TO_TIMESTAMP ** ** –
“P_START”和“P_ENDE”的数据类型是什么? –
P_START和P_ENDE是时间戳(6) – xTex
奇怪,尝试'TO_TIMESTAMP之间A.P_START( '20170327070000', 'YYYYMMDDHH24MISS') AND TO_TIMESTAMP( '20170327090000', 'YYYYMMDDHH24MISS')'或'A.P_START TIMESTAMP'之间2017-03-27 07:00:00'AND TIMESTAMP'2017-03-27 09:00:00'' –