sql - 根据表中的其他行向 SQL 表中添加列
问题描述
我有一张表,其中包含公交系统的停止时间。细节并不重要,但我的表格基本上是这样的:
我正在从包含除下一站 ID 之外的所有内容的 CSV 文件中导入数据。我想生成 Next Stop ID 以加快我将在我的应用程序中进行的一些数据处理。
对于每一行,下一站 ID 应该是下一行中与行程 ID 和服务 ID 匹配的站 ID。排序应基于停止序列,它将增加但不一定按顺序(1、20、21、23 等而不是 1、2、3、4...)。
这是我希望它看起来像的一个例子。为简单起见,我将所有服务 ID 保持不变,并且有两个 Trip ID。如果没有下一站,我希望该条目为空白。
我认为完全在 SQL 中执行此操作是有意义的,但我不确定如何最好地执行此操作。我知道我会如何用标准编程语言做到这一点,但不知道 SQL。谢谢您的帮助。
解决方案
您可以使用lead()
:
select
t.*,
lead(stop_id)
over(partition by trip_id, service_id order by stop_sequence) next_stop_id
from mytable t
实际上存储派生信息不一定是一个好主意,因为您可以在需要时动态计算(您可以将查询放在视图中以使其更易于访问)。但是,如果您想在 中使用它update
,那么假设它stop_id
是表的主键,它看起来像:
update mytable
set next_stop_id = t.next_stop_id
from (
select
stop_id,
lead(stop_id) over(partition by trip_id, service_id order by stop_id) next_stop_id
from mytable
) t
where mytable.stop_id = t.stop_id
推荐阅读
- python - 我怎样才能让我的目标来自独特的价值观?
- alexa - Alexa 结束会话
- php - 如何知道包含组装的代码位的文件夹路径?
- python - 如何根据子 ID 拆分数据帧
- linq - "Operation is not valid due to the current state of the object." Exception, when I want to retrieve Items
- javascript - 使用 JS 解码 Firebase 动态链接
- shell - 来自列表的 For 循环
- java - 如何停止 Spark RDD mapPartitions 在集群中复制数据?
- bash - 尝试使用“kubectl cp”将文件复制到 Pod,但出现错误:未知标志:--all-namespaces
- sql-server - 根据历史表创建日期范围报告