Oracle 最短旅行时间

Oracle 最短旅行时间,oracle,Oracle,显示行程id、来源、目的地和行程时间,其中行程时间最短。根据计划id对结果进行排序 我已经尝试了这段代码,当我得到错误时,我的查询中缺少了一些东西 select sh.schedule_id,sh.source,sh.destination,sh.duration as travel_time from schedule sh (select min(sh.duration) from schedule) order by sh.sched

显示行程id、来源、目的地和行程时间,其中行程时间最短。根据计划id对结果进行排序

我已经尝试了这段代码,当我得到错误时,我的查询中缺少了一些东西

 select sh.schedule_id,sh.source,sh.destination,sh.duration as travel_time
         from schedule sh
         (select min(sh.duration) from schedule)
         order by sh.schedule_id;


几乎正确。您忘记在where子句中定义最小旅行时间

SELECT   sh.schedule_id,
         sh.source,
         sh.destination,
         sh.duration as travel_time
FROM     schedule sh
WHERE    sh.duration = (select min(duration) from schedule) -- This is where the problem was.
ORDER BY sh.schedule_id;

几乎正确。您忘记在where子句中定义最小旅行时间

SELECT   sh.schedule_id,
         sh.source,
         sh.destination,
         sh.duration as travel_time
FROM     schedule sh
WHERE    sh.duration = (select min(duration) from schedule) -- This is where the problem was.
ORDER BY sh.schedule_id;
那么唯一一个看起来像旅行时间的列是
DURATION
,它的数据类型是
NUMBER
。这个数字代表什么?分钟?小时?还有别的吗

无论如何,这里有一个你可以考虑的选择。它使用
RANK
分析函数对持续时间(即“行程时间”)进行“排序”,并获取持续时间最小的一行(或多行)

这种方法的优点是只需扫描表一次;如果在子查询中选择“最短持续时间”,然后使用其结果获取感兴趣的数据,则将访问同一个表两次,这在涉及多行时可能很重要。对于小样本数据集,您不会注意到任何差异

时间表
CTE代表一些测试数据;您需要从第6行开始的代码

SQL> with schedule (schedule_id, source, destination, duration) as
  2    (select 1, 'Paris', 'London'   , 8 from dual union all
  3     select 2, 'Berlin', 'Prague'  , 4 from dual union all
  4     select 3, 'Zagreb', 'Budapest', 4 from dual
  5    )
  6  select schedule_id, source, destination, duration
  7  from (select schedule_id, source, destination, duration,
  8           rank() over (order by duration) rn
  9        from schedule
 10       )
 11  where rn = 1;

SCHEDULE_ID SOURCE DESTINAT   DURATION
----------- ------ -------- ----------
          2 Berlin Prague            4
          3 Zagreb Budapest          4

SQL>
那么唯一一个看起来像旅行时间的列是
DURATION
,它的数据类型是
NUMBER
。这个数字代表什么?分钟?小时?还有别的吗

无论如何,这里有一个你可以考虑的选择。它使用
RANK
分析函数对持续时间(即“行程时间”)进行“排序”,并获取持续时间最小的一行(或多行)

这种方法的优点是只需扫描表一次;如果在子查询中选择“最短持续时间”,然后使用其结果获取感兴趣的数据,则将访问同一个表两次,这在涉及多行时可能很重要。对于小样本数据集,您不会注意到任何差异

时间表
CTE代表一些测试数据;您需要从第6行开始的代码

SQL> with schedule (schedule_id, source, destination, duration) as
  2    (select 1, 'Paris', 'London'   , 8 from dual union all
  3     select 2, 'Berlin', 'Prague'  , 4 from dual union all
  4     select 3, 'Zagreb', 'Budapest', 4 from dual
  5    )
  6  select schedule_id, source, destination, duration
  7  from (select schedule_id, source, destination, duration,
  8           rank() over (order by duration) rn
  9        from schedule
 10       )
 11  where rn = 1;

SCHEDULE_ID SOURCE DESTINAT   DURATION
----------- ------ -------- ----------
          2 Berlin Prague            4
          3 Zagreb Budapest          4

SQL>

我想当您从同一个表访问数据时,不需要别名

代码:


我想当您从同一个表访问数据时,不需要别名

代码:


查询本身显然是错误的,但是-您需要有关旅行时间和学院管理系统发布模型的帮助吗?这两个有什么关系?哎呀..对不起,这是错误的..现在我已经上传了正确的模式。查询本身显然是错误的,但是-你需要关于旅行时间和学院管理系统发布模型的帮助吗?这两个有什么关系?哎呀..对不起,这是个错误..现在我上传了正确的模式。一切都会爆炸的,@Robert。轰!:)作者将被迫使用排名而不是行号。修正了,谢谢你的评论!从第6行开始的代码只通过了一个测试用例,我不明白你的意思。“请随意提供您的测试用例,这样我们就不必自己做了。一切都会爆炸的,”罗伯特说。轰!:)作者将被迫使用排名而不是行号。修正了,谢谢你的评论!从第6行开始的代码只通过了一个测试用例,我不明白你的意思。请随意提供您的测试用例,这样我们就不必自己做了。