【问题标题】:SQL MONTH AVERGESQL 月平均值
【发布时间】:2020-07-09 10:49:20
【问题描述】:

这是我得到的两者的持续时间。

select (TO_TIMESTAMP(s.END, 'hh24:mi:ss') - TO_TIMESTAMP(s.START, 'hh24:mi:ss')) from SESSION s;

我正在尝试获取每月的平均值。我确实有一个时间维度,我可以使用表中的 month_name 来引用它。但是,我该怎么做呢?我曾尝试通过强制转换来使用 add_months,但没有成功。

谢谢你们。

VARCHAR 为所有。

DATE         START      END        RESULT OF QUERY        AVERAGE PER MONTH
13-FEB-11   16:00:00    18:00:00   +00 02:00:00.000000       ?
02-APR-11   08:30:00    10:30:00   +00 02:00:00.000000
02-APR-11   16:00:00    18:00:00   +00 02:00:00.000000
05-APR-11   08:30:00    10:30:00   +00 02:00:00.000000
05-APR-11   16:00:00    18:00:00   +00 02:00:00.000000

【问题讨论】:

  • 您真的有单独的列来存储日期和时间吗? date,start 和 end 列的数据类型是什么?
  • 所有的varchar。 @GMB,是的。我必须把它分开。

标签: sql oracle date time average


【解决方案1】:

我建议将脚本转换为 dates 而不是时间戳。这会为您提供一个以天为单位表示间隔的数字结果,与间隔不同,您可以取平均值。

如果您想要每月的平均会话持续时间,您可以这样汇总:

select 
    trunc(to_date(s.date, 'dd-mon-yy'), 'mm') mnt,
    avg(to_date(s.end, 'hh24:mi:ss') - to_date(t.start, 'hh24:mi:ss')) avg_duration
from session s
group by trunc(to_date(s.date, 'dd-mon-yy'), 'mm')

如果你想将结果作为一个区间,你可以在计算结果上使用numtodsinterval():

select 
    trunc(to_date(s.date, 'dd-mon-yy'), 'mm') mnt,
    numtodsinterval(
        avg(to_date(s.end, 'hh24:mi:ss') - to_date(t.start, 'hh24:mi:ss')),
        'day'
    ) avg_interval
from session s
group by trunc(to_date(s.date, 'dd-mon-yy'), 'mm')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2021-08-18
    相关资源
    最近更新 更多