Postgres匹配到最近的时间

托尼·莱迪格

我有两个要在Ubuntu上使用psql(9.3.5)尝试加入的数据集:

第一组包含有关离开节点i之后到达节点j的时间的信息。我正在尝试将其与j上最接近的计划到达时间进行匹配,然后针对该计划事件计算i和j之间的距离(d)之差。该差异取决于时间表。

我当前的尝试包括在第一个(原始)表和日程表(to_match)表之间进行两次联接(分别在i和j上),并使用min()返回事件时间和日程表之间的差值。

        select r.i, r.j, r.time, second.schedule, 
min((r.time - second.schedule)) as diff_from_schedule, 
    round(second.d - first.d) as d_diff
    from raw r
    inner join to_match first on r.i = first.key
    inner join to_match second on r.j = second.key
    group by r.i, r.j, r.time, second.schedule, d_diff

这不会返回两个值之间的最接近/最小差。实际上,有些距离还很遥远。

i           j           time    sched   diff_from_schedule  d_diff
12598       14013       57233   20340   36893   2951
12598       14013       25829   26640   811     3015
12598       14013       53927   66780   12853   2951
12598       14013       66236   18180   48056   2951

另外,原始表中有24条记录,但它返回to_match表中的每个值。我正在使用内部联接,它不应该只返回左表中的记录吗?有人有主意吗?

带有示例数据的PGDump位于此[Gist] { https://gist.github.com/laidig/37fcd396009cabf5c1e8 }中。非常感谢你的帮助!

帕特里克

您在这里遇到了一个棘手的问题,因为您的数据不允许导出奇异的解决方案。首先是最接近的“解决方案”,但请继续阅读以获取详细信息:

SELECT DISTINCT diffs.*, round(dest.d - src.d) AS d_diff
FROM
   (SELECT DISTINCT ON (r.i, r.j, r.time)
      r.i, r.j, r.time, dest.schedule, min(abs(r.time - dest.schedule)) AS diff
    FROM raw r
    JOIN to_match dest ON r.j = dest.key
    GROUP BY r.i, r.j, r.time, dest.schedule
    ORDER BY r.i, r.j, r.time, diff ASC) AS diffs
JOIN to_match dest ON dest.key = diffs.j AND dest.schedule = diffs.schedule
JOIN to_match src ON src.key = diffs.i
ORDER BY diffs.i, diffs.j, diffs.time

子查询为每个raw数据组合计算to_match计划最小时间差,然后为每个raw记录选择最匹配的记录。然后,外部查询将添加d_diff到其中。

但是,您的数据模型存在缺陷。对于表中的每个key值,to_match您都有两个d值。对于j这不是一个问题,因为你可以在过滤器上schedule的价值,但你没有这样的信息i,因此你拿到两支安打为每个记录raw数据(或很多,你有不同的d值的i值)。因此,以上是最好的结果。

你可能想更仔细的数据模型和规范来分析to_match至少1页以上的表,增加对计划的详细信息,您可以唯一同时匹配ij一个时间表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

TSQL将员工分配匹配到打孔时间

来自分类Dev

比较和匹配最近的时间,Python

来自分类Dev

如何从每行的多个起始节点匹配到最近的n个特定类型的n个节点?

来自分类Dev

匹配到逗号或行尾

来自分类Dev

postgres 聚合连接匹配到一个数组字段

来自分类Dev

python日期匹配到星期

来自分类Dev

WebRTC:匹配最近的同行

来自分类Dev

匹配最近发生的

来自分类Dev

将URL匹配到Symfony中的路由

来自分类Dev

将元素匹配到总和列表

来自分类Dev

将向量匹配到向量列表

来自分类Dev

路由匹配到Rails中的动态动作

来自分类Dev

Android opencv byte []匹配到byte []

来自分类Dev

匹配到相应值后运行公式

来自分类Dev

查找最近的时间戳

来自分类Dev

确定最近的日期时间

来自分类Dev

Stata中最近的邻居匹配

来自分类Dev

Stata中最近的邻居匹配

来自分类Dev

选择连续日期的最近时间

来自分类Dev

列表中最近的时间值

来自分类Dev

如何获得最近的更大时间

来自分类Dev

加入最近的先前时间戳

来自分类Dev

R有条件地将日期时间从一个数据帧匹配到第二个数据帧中最接近的日期时间字段

来自分类Dev

二进制模式匹配到列表

来自分类Dev

使用awk打印从匹配到文件结尾的行

来自分类Dev

将所有2对向量匹配到第三列

来自分类Dev

将通用参数匹配到impl中的关联类型

来自分类Dev

将列表部分匹配到列表列表

来自分类Dev

PHP将数组随机匹配到自身中