【问题标题】:homework - trying to calculate multiple flight stops between two cities?作业 - 试图计算两个城市之间的多个航班停靠点?
【发布时间】:2012-03-14 02:13:04
【问题描述】:

这是一个数据库类,使用 Oracle DB 11g

Tables:

• Flight (flt_no, from_city, to_city, flt_distance, 
  flt_departs, flt_arrives, flt_price)

• Aircraft (craft_id, craft_name, cruising_range)

• Employee (emp_id, emp_name, emp_salary)

• Certified (emp_id, craft_id)

查询:一位客户希望从麦迪逊到纽约旅行,换班次数不超过两次。如果客户希望在下午 6 点之前到达纽约,请列出从麦迪逊出发的选择。

感谢任何帮助。我真的不知道从哪里开始。

编辑 到目前为止,这是我想出的。请让我知道我是否走在正确的轨道上。

SELECT F.flt_no
  FROM Flight F
 WHERE F.from_city = 'Madison'
   AND F.to_city = 'New York'
   AND DATEPART(hh, F.flt_arrives) <= 18
 UNION
SELECT F.flt_no
  FROM Flight F
 WHERE (F.from_city = 'Madison'
        AND F.to_city IN (SELECT from_city
                            FROM Flight F
                           WHERE F.to_city = 'New York')
       )
    OR
       (F.to_city = 'New York'
        AND F.from_city IN (SELECT to_city
                              FROM Flight F
                             WHERE F.from_city = 'Madison')
        AND DATEPART(hh, F.flt_arrives) <= 18
       )

【问题讨论】:

  • "我有一个不寻常的查询请求。" 不,没有什么不寻常的。您的表结构看起来有些不稳定。我无法猜测,因为这取决于您的要求。
  • 嗯,根据我的习惯,这很不寻常。表格结构是作业中所需的设计,所以我无法更改。你的意思是什么要求?我只需要编写将返回我指定的结果的任何查询。
  • DATEPART 不是 Oracle 语法(除了在 EssBase 中,这不算数)
  • @APC 或任何人,你能告诉我如何单独查询小时字段。这就是你在谷歌上寻找答案时得到的结果。我已经阅读了我的教科书一千遍,关于这个问题没有任何帮助。这就是我在这里问的原因。有人请帮我一把。
  • @bOkeifus,问题是您正在阅读您的教科书,而不是尝试很多次来弄清楚您的查询做了什么,出了什么问题以及如何改进它。您可以通过查看 this site 来解决您的日期选项。

标签: sql oracle oracle11g


【解决方案1】:

想想这三种情况:

  1. 直飞。
  2. 1 站的航班。
  3. 两站的航班。

现在开始逐步浏览案例。

对于 1. 寻找开始和停止的航班,你知道在哪里,你知道什么时候,对吧?

对于 2。想想那两个航班。他们将在哪里开始和结束,这两次飞行的共同点是什么。每个航班的时间标准是什么?

对于 3. 考虑这 3 个部分以及每个部分的特征,包括依赖关系

如果要显示所有选择,那么您最终希望将所有这些结合起来。

此功能:选择to_char(DATE,'HH24') may help.

【讨论】:

    【解决方案2】:

    正如@Michael Durrant 给出的答案,我只想以SQL 格式提供解决方案。希望这会有所帮助。请检查不等于签名。

    #Direct flight
    select f.no
    from flights f
    where f.arrives=18:00 and (f.from='madison' and f.to='NewYork')
    
    union
    
    # Cases for one connecting flight
    
    select f2.no 
    from flights f1, flights f2
    where f2.arrives=6pm and 
        f1.from='Madison' and f1.to<>'New York'
        and f1.to=f2.from and f2.to='New York'
        and f2.depart> f1.arrives
        and f2.arrives<'18:00'
    
    union
    #Cases involving two connecting flights 
    select f3.no
    from flights f1,flights f2, flights f3
    where   f1.from='Madison'
        and f1.to=f2.from
        f1.to<>'New York'
        f2.to=f3.from
        f2.to<>'New York'
        and f3.to='New York'
        and f2.depart> f1.arrives   
        and f3.depart> f2.arrives
    
        and f3.arrives<'18:00'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-17
      • 1970-01-01
      • 2016-06-07
      • 2010-09-06
      • 2011-03-25
      • 2021-11-14
      相关资源
      最近更新 更多