给定Y列中的共享值,从同一列X中提取多个值

时间:2019-07-15 15:44:33

标签: sql postgresql

在开始之前,我要感谢您的帮助!我目前正在处理英国铁路公司提供的数据;我拥有的数据当前包含在PostgreSQL上的关系数据库中。我的最终目标是提取铁路网络服务的起点-终点对。

现在,条目存储在行中,每行包含一个火车行程中的一个站点/位置。例如,如果火车通过E和F从D到G行驶,那么D将被包含在一行中,并标记为origin_location,E和F标记为intermediate_location,G标记为terminate_location。他们每个人还将标有其他详细信息,例如火车ID,出发/通过/到达时间和旅行日期。

最终,我希望从这些条目中编写一个查询,为我提供所有可能的起点-终点对。因此,例如,继续上面的示例,我希望查询生成一个表,该表为我提供了这样的行:D-E; D-F; D-G; E-F;例如; F-G。这些位置之间的链接基于它们共享另一个列“ Y列”中的公共火车标识符。

我刚开始研究,但是我不希望您帮助我找到特定的代码作为解决方案。相反,我只是希望您能指出我可以阅读使用的功能的方向,然后我们将看到它的去向。

有人尝试使用相同的数据集,尽管建立此功能的目的略有不同-也就是说,要获取在特定日期运行的所有列车的完整时刻表(每列火车的出发/中间/终止位置为一排)。此处详细介绍了该功能:https://github.com/jhumphry/ukraildata_etl/blob/master/sql/mca_get_full_timetable.sql

1 个答案:

答案 0 :(得分:1)

demo:db<>fiddle

您需要在有序停止ID上进行自我联接(希望您有这样的列)。您必须自己加入每一个旅程,但只有以下几站:

SELECT
    s1.journey_id,
    s1.stop_name,
    s2.stop_name
FROM
    schedule s1
JOIN schedule s2 ON s1.journey_id = s2.journey_id AND s1.stop_id < s2.stop_id