【问题标题】:I need to display DURATION(enddate - startdate) whose DURATION is greater than average DURATION我需要显示 DURATION(enddate - startdate) 其 DURATION 大于平均 DURATION
【发布时间】:2022-06-10 21:01:09
【问题描述】:

这是原始表格。持续时间由 (ENDDATE - STARTDATE) 计算

RESNO   RESDATE NOOFGUESTS  STARTDATE   ENDDATE 
1       01-NOV-15   5   01-FEB-16   05-FEB-16   
2       01-NOV-15   2   05-JAN-16   10-JAN-16   
3       03-NOV-15   3   05-JAN-16   15-JAN-16   
4       02-JAN-16   2   03-JAN-16   06-JAN-16   
5       15-FEB-16   3   20-FEB-16   22-FEB-16   
6       20-FEB-16   3   25-FEB-16   28-FEB-16   
7       20-FEB-16   5   22-FEB-16   25-FEB-16   
8       24-FEB-16   2   28-FEB-16   03-MAR-16   
9       28-FEB-16   10  10-MAR-16   15-MAR-16   

我尝试在 LIVE ORACLE 中使用以下 SQL

select RESNO, (ENDDATE - STARTDATE) as Durations from reservation 
where (ENDDATE - STARTDATE) >  (sum(ENDDATE - STARTDATE) / count(*));

但它给出了一个错误 ORA-00920: 无效的关系运算符

我也使用了其他方法,但没有得到任何有效的结果。 请帮忙

【问题讨论】:

  • 选择 RESNO, (ENDDATE - STARTDATE) 作为 Duration from reservation where (ENDDATE - STARTDATE) > (select avg(ENDDATE - STARTDATE) from reservation )

标签: sql oracle


【解决方案1】:

看看 SQL 中的分析函数(AskTom 有很多)。这是一个简单的解决方案:

select * from (
  select resno,enddate - startdate duration, 
    avg(enddate - startdate) over () avg_dur
  from reservations)
where duration > avg_dur;

【讨论】:

    猜你喜欢
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2012-08-21
    相关资源
    最近更新 更多