如何在sql中查找中间值
我有下面的sql查询,它给出了按月、周和日分组的总h_时间。相反,我想要月、周和日的平均h_时间。如何在Oracle SQL中实现这一点如何在sql中查找中间值,sql,oracle,oracle-sqldeveloper,median,partition,Sql,Oracle,Oracle Sqldeveloper,Median,Partition,我有下面的sql查询,它给出了按月、周和日分组的总h_时间。相反,我想要月、周和日的平均h_时间。如何在Oracle SQL中实现这一点 SELECT DAY, MEDIAN(H_TIME) AS HANDLE_TIME FROM( select MONTH, WEEK, DAY, CASE WHEN C.JOINED IS NOT NULL THEN (NVL(C.TOTAL_TALK,0) + NVL(C.TOTAL_HOL
SELECT DAY,
MEDIAN(H_TIME) AS HANDLE_TIME
FROM(
select
MONTH, WEEK, DAY,
CASE
WHEN C.JOINED IS NOT NULL
THEN (NVL(C.TOTAL_TALK,0) + NVL(C.TOTAL_HOLD,0) + (NVL((C.DATETIME - C.START_DATETIME)*86400,0)) )/86400
ELSE 0 END AS H_TIME
from TABLE1 C
LEFT JOIN TABLE2 S
ON S.ID = C.ID
where c.direct = 'Inbound'
)
where UPPER(ITEM1) like 'SOMETHING%'
GROUP BY
DAY
输出:
DAY HANDLE_TIME
14-APR-17 .00567129629629629629629629629629629629629
15-APR-17 0
17-APR-17 0
17-APR-17 .00422453703703703703703703703703703703703
19-APR-17 .00269675925925925925925925925925925925925
19-APR-17 0
19-APR-17 0
19-APR-17 .00824074074074074074074074074074074074074
尝试替换:
SUM(H_TIME) AS HANDLE_TIME
作者:
(第3行)
编辑: 对于以下月份,替换:
select
MONTH, WEEK, DAY,
select
MONTH, WEEK, DAY,
作者:
以及:
作者:
在接下来的几周内,更换:
select
MONTH, WEEK, DAY,
select
MONTH, WEEK, DAY,
作者:
以及:
作者:
问题不在于
median()
函数,而是groupby
列
Oracle日期数据类型实际上是日期时间,例如2017-05-24 08:09:11。因此,在比较日期时,我们必须考虑时间因素
最简单的方法是截断日期值,将时间设置为午夜。在你的情况下,看起来是这样的:
SELECT trunc(day) as DAY,
MEDIAN(H_TIME) AS H_TIME
FROM (
...
)
group by trunc(day)
此解决方案优于使用
to_char()
删除时间元素,因为数据类型仍然是DATE。因此,如果您按trunc(day)对结果进行排序,您将得到预期的日历顺序,而按to_char(day)
进行排序将得到意外的字母数字顺序。尝试使用to_char(day)分组方式,并选择语句您的问题可能来自日期类型携带的时间部分(即使没有明确设置)
要摆脱它,可以使用trunc函数
替换:
SELECT DAY,
作者:
以及:
作者:
在第3行@gurvindersingh或您是指子查询中?@gurvindersingh未复制。抱歉,已更新查询。请提供该数据的示例数据和所需输出。请提供表1和表2的示例数据(具有实际值的行),并告诉我们您对该数据的预期输出。您确定您的某些“日”值不包含您未显示的时间成分(使其不同)?谢谢,但这只会给我“天”的平均h_时间,对吗?那么我如何获得月和周的h_时间?因为在我之前进行求和时,这将求和“天”的所有h_时间然后我在excel中创建了一个数据透视表,我也可以得到每周和每月的总和。但对于中位数,我想这是行不通的。不,不会。为了做到这一点,你必须在之前和你的团队一起玩。(删除每周中位数的日期和每月中位数的周)你的意思是创建单独的查询吗?因为我想对所有人、日、周和月进行查询,我认为这是最有效的方法,因为在同一个查询中,如果没有数据冗余,就无法显示对日、周或周和月的分析,这是很糟糕的:)。@Arman-最大的问题是,虽然部分和的总和等于整体总和,中位数的情况并非如此。(就这一点而言,平均值也是如此。)没有办法计算一周或一个月的时间中位数,只需知道“日”水平的中位数,通过旋转或任何其他方式。
select
MONTH, WEEK,
GROUP BY
MONTH
,WEEK
,DAY
GROUP BY
MONTH
,WEEK
SELECT trunc(day) as DAY,
MEDIAN(H_TIME) AS H_TIME
FROM (
...
)
group by trunc(day)
SELECT DAY,
SELECT trunc(DAY)
GROUP BY DAY
GROUP BY trunc(DAY)