【问题标题】:how to join two table by time [closed]如何按时间加入两个表[关闭]
【发布时间】:2021-05-26 07:36:25
【问题描述】:

答:

CODE TIMESTAMP MODE
A 2020-09-01 23:12:43 Sleep
B 2020-09-02 22:09:12 Weak

乙:

CODE TIMESTAMP Action
A 2020-08-01 11:12:43 Go
A 2020-09-01 22:09:12 Stop
A 2020-09-02 06:12:43 Stop
A 2020-09-03 11:07:43 Stop
B 2020-09-03 22:09:12 Go

决赛桌:

CODE A_TIMESTAMP MODE Action B_TIMESTAMP
A 2020-09-01 23:12:43 Sleep Stop 2020-09-02 06:12:43
B 2020-09-02 22:09:12 Weak Go 2020-09-03 22:09:12

我想要的是加入表A和表B(key=Code),但是如果表B的时间戳大于表A的值,这是只加入第一个的方法。

一张表的行数超过 1000 万行

表B的行数也是100万。

我可以使用 dask、pyspark、pandas、sql 全部。我怎样才能有效地得到它?

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql pandas database join mariadb


【解决方案1】:

在 90% 的场景中,以您想要的方式从数据库引擎获取数据是最快、最有效的方式。

如果您在表 B 中始终有一条记录的时间戳大于表 A 中的时间戳,那么答案就是简单的连接:

select * from A
join B 
on A.Code = B.Code
and A.TimeStamp < B.TimeStamp

如果不是:

select
    *
from
    A
cross apply (
    select TOP 1 *
    from B 
    where A.Code = B.Code
      and A.TimeStamp < B.TimeStamp
    order by B.TimeStamp
)

【讨论】:

  • 并不总是有一个。那么,我可以使用交叉应用吗?
  • 那么是的,第二个查询就是你的答案
  • @kang 当您看到您的问题已关闭时,请编辑您的问题以改进它并添加您正在使用的正确 sql 引擎,(顺便说一下,我的查询是用 sql server 格式编写的),也如果有帮助,请接受/支持答案,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 2014-02-23
  • 1970-01-01
  • 2013-06-19
  • 2015-10-25
相关资源
最近更新 更多