2014-09-03 72 views
0

我有一个数据库充满了列车运动数据,当一列火车进入一个车站时,我们可能会收到一个到达信息,当火车离开车站前往下一个目的地时,我们可能会得到一个离开消息。因此,当一列火车撞到一个火车站时,我们通常会在它到达时收到2条消息1,当它到达时收到1条消息。然而,有时这些数据会有错误,所以我们可以得到另一个移动信息来纠正出发/到达数据。如果移动消息是前一个的修正,它将具有1的correction_ind,否则它将具有0.的修正_ind。mysql group by where another field is same

这意味着对于给定站,我们可以总共具有4条消息(出发,到达,固定出发,固定到达)

我试图让沿着特定火车路线的每个车站的0/1出发消息和0/1到达消息。当我们按照下面的顺序选择移动消息:

  • 挑选固定的信息(如果存在的话),否则
  • 选择第一乐章消息(如果存在的话),否则
  • 不挑不出什么

我的查询看起来是这样的:

SELECT 
    tm.variation_status, 
    tm.planned_timestamp, 
    tm.platform, 
    tm.actual_timestamp, 
    tm.event_type, 
    tm.timetable_variation, 
    sched.tps_description 
FROM 
    train_activation ta, 
    train_movement tm 
     LEFT JOIN 
    cif_tiploc sched ON sched.stanox = tm.loc_stanox 
WHERE 
    train_uid = 'C40200' 
     AND date(creation_timestamp) = '2014-08-20' 
     AND tm.train_id = ta.train_id 
ORDER BY tm.correction_ind ASC 

我有此查询的问题是针对股份公司iven站我们可以得到0-2个出发信息和0-2个到达信息。如果我添加以下GROUP BY tm.event_type(这是告诉我们这是一个离开还是到达消息的字段),我们将只总共收到2条消息,因为它会将所有depature和所有到达的消息组合在一起!

如何重新编写此查询,以便我们只为路线上的每个工作站选择最佳的到达/发送消息?

  1. 站可以通过tm.loc_stanox或sched.tps_description识别
  2. 消息会告诉我们如果通过tm.event_type
  3. 一个出发或到达的消息会如果修正到先前的消息后告诉我们tm.correction_ind这将是1,如果它的更正或0,如果它不是

在这个问题上的任何帮助将是惊人的。

回答

0

如何按大小写/何时条件尝试订单,但对于各个工作站。

为了通过 tm.loc_stanox, 情况下,当像tm.event_type '固定%' 然后1 时tm.event_type像 '到达%' 然后2 当tm.event_type像 '出发日期%' 然后3端

我希望我有更多的样本数据,以查看您描述的真实场景,以便更好地协助。