我有一个数据库充满了列车运动数据,当一列火车进入一个车站时,我们可能会收到一个到达信息,当火车离开车站前往下一个目的地时,我们可能会得到一个离开消息。因此,当一列火车撞到一个火车站时,我们通常会在它到达时收到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和所有到达的消息组合在一起!
如何重新编写此查询,以便我们只为路线上的每个工作站选择最佳的到达/发送消息?
- 站可以通过
tm.loc_stanox
或sched.tps_description识别 - 消息会告诉我们如果通过
tm.event_type
- 一个出发或到达的消息会如果修正到先前的消息后告诉我们
tm.correction_ind
这将是1,如果它的更正或0,如果它不是
在这个问题上的任何帮助将是惊人的。