【问题标题】:Extracting multiple values from the same column, X, given their shared value in column Y给定 Y 列中的共享值,从同一列 X 中提取多个值
【发布时间】:2019-07-16 00:04:13
【问题描述】:

首先,我要感谢您的帮助!我目前正在研究英国铁路提供的数据;我拥有的数据目前包含在 PostgreSQL 的关系数据库中。我的最终目标是提取铁路网络服务的起点-目的地对。

目前,条目存储在行中,每行包含火车旅程中的一个站点/位置。例如,如果一列火车从 D 经 E 和 F 行驶到 G,则 D 将被包含在一行中并标记为 origin_location,E 和 F 为 middle_location,G 为 terminating_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) 样本数据和期望的结果比解释段落更有帮助。 (2) 你想要的是递归 CTE。您可能应该就如何应用它们提出一个新的、特定于矿石的问题。
  • 谢谢 Gordon - 我会尝试看看你的建议

标签: sql postgresql


【解决方案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

【讨论】:

  • 谢谢,我会调查的!
  • 刚刚意识到那是您在此处发布的链接。我看过,这很有帮助。感谢您的麻烦!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
相关资源
最近更新 更多