Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql中查找中间值_Sql_Oracle_Oracle Sqldeveloper_Median_Partition - Fatal编程技术网

如何在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

我有下面的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_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)