mysql group所在的另一个字段是相同的

时间:2014-09-03 09:44:44

标签: mysql

当火车进入车站时,我有一个充满列车运行数据的数据库,我们可能会收到一条到达信息,当火车离开车站前往下一个目的地时,我们可能会收到一条出发信息。

因此,当火车到达车站时,我们通常会在到达时获得2条消息1,在它离开时获得1条消息。但是,有时这些数据会出错,因此我们可以获得另一条移动信息来纠正出发/到达数据。如果移动消息是对前一个的修正,则它将具有1的correction_ind,否则它将具有0的correction_ind。

这意味着对于特定的电台,我们总共可以收到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

我对此查询的问题是对于给定的站点,我们可以获得0-2个出发消息和0-2到达消息。如果我添加以下GROUP BY tm.event_type(这是告诉我们这是否是出发或到达消息的字段),我们将只收到2条消息,因为它将所有depature组合在一起并且所有到来了!

如何重新编写此查询,以便我们只为路径上的每个站点选择最佳到达/删除消息?

  1. 可以通过tm.loc_stanox或sched.tps_description
  2. 来识别电台
  3. 一条消息会通过tm.event_type
  4. 告诉我们它是离开还是到达
  5. 一条消息会告诉我们tm.correction_ind对前一条消息的修正是否为1,如果是修正则为0,如果不是
  6. 则为0

    任何关于这个问题的帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

如何按案例/条件审核订单,但是对于每个相应的站点。

订购     tm.loc_stanox,     tm.event_type之类的情况,比如'fixed%',然后是1          当tm.event_type喜欢'到达%'然后是2          当tm.event_type喜欢'离开%'然后3结束

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