Oracle 最短旅行时间
显示行程id、来源、目的地和行程时间,其中行程时间最短。根据计划id对结果进行排序 我已经尝试了这段代码,当我得到错误时,我的查询中缺少了一些东西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
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行开始的代码只通过了一个测试用例,我不明白你的意思。请随意提供您的测试用例,这样我们就不必自己做了。