从SQL中获取组中的随机值和最后一个值

时间:2010-03-01 11:16:04

标签: sql database join max

我有一个包含列车时刻表的SQL表。该表看起来像这样:

附表

TrainNumber
LegID
DepartureTime
DepartureStation
ArrivalTime
到达站

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

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

此外,同一天的同一列车号码可能有多次出发。

1 个答案:

答案 0 :(得分:0)

您需要使用组合(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都大于之前的LegID,您也可以使用max(LegID)。此外,我假设The ArrivalTime包含日期,因此第二天凌晨1:00仍然晚于当天晚上10:00。所以,当然,要适应口味。