【问题标题】:Getting random and last value from group in SQL从 SQL 中的组中获取随机值和最后一个值
【发布时间】:2010-03-01 11:16:04
【问题描述】:

我有一个包含火车时刻表的 SQL 表。该表如下所示:

时间表

列车号
LegID
出发时间
出发站
到达时间
到达站

我的真实数据库包含几个表,但对于这个问题,只有上面的一个是相关的。不同的 trainNumber 可以有不同数量的腿。根据用户选择的出发站,我想从该站输出所有即将到来的路线。

输出必须包含出发时间和到达站。但我不想包括中间的腿。任何人都可以指导我如何实现这一目标的正确方向吗?我尝试使用 max 语句。但并没有完全按照我想要的方式工作。

另外,同一天同一列车号可以有多趟发车。

【问题讨论】:

  • 您使用的是哪个数据库服务器?

标签: sql database join max


【解决方案1】:

您需要使用组合 (DepartureTime + TrainNumber) 作为查询的键,获取给定值组合的最大到达时间,然后找出对应的 ArrivalStation 是什么。因此,您可以在 Schedule 和自身的分组版本之间进行内部连接,即

SELECT
    TrainTableA.TrainNumber
    ,TrainTableA.DepartureTime
    ,ArrivalStation
FROM
    (SELECT /* all upcoming train routes for given station */
        TrainNumber
        ,DepartureTime
        ,ArrivalTime
        ,ArrivalStation
    FROM
        Schedule
    WHERE DepartureStation = givenStation
    ) as TrainTableA
    INNER JOIN 
    (SELECT /* Just the last station for each departure */
        TrainNumber
        ,DepartureTime
        ,Max(ArrivalTime) as a
    FROM
        Schedule
    GROUP BY
          TrainNumber
          ,DepartureTime
    ) as TrainTableB
    ON
    TrainTableA.TrainNumber = TrainTableB.TrainNumber
    AND TrainTableA.DepartureTime = TrainTableB.DepartureTime
    AND TrainTableA.ArrivalTime = TrainTableB.a

我无法从问题中完全判断您是否有路线顺序的通用指标,因此我使用了 max(ArrivalTime)。如果每个 LegID 都大于前一个,您也可以使用 max(LegID)。另外,我假设 The ArrivalTime 包含日期,因此第二天的 1:00 AM 仍然晚于同一天的 10:00 PM。所以,当然,调整口味。

【讨论】:

  • 谢谢伙计。这真的很有帮助,我得到了它的工作:-)
猜你喜欢
  • 2016-09-02
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 2020-08-07
  • 2018-07-01
  • 1970-01-01
相关资源
最近更新 更多