2个不同数据库中表之间的连接,时间戳略有不同(MySQL)

2个不同数据库中表之间的连接,时间戳略有不同(MySQL),mysql,sql,datetime,join,mariadb,Mysql,Sql,Datetime,Join,Mariadb,正如中所建议的,我使用以下格式从不同的mysql数据库检索跨两个表共享列值的数据 SELECT <...> FROM A.table1 t1 JOIN B.table2 t2 ON t2.column2 = t1.column1; 选择 从A.table1t1连接B.table2t2在t2.column2=t1.column1上; 我想从表中获取相同日期、小时和分钟的共享值。然而,我意识到,由于来自不同数据库的两个表的时间戳列中的时间戳值在记录的秒数方面略有不同,因此我无法检索任

正如中所建议的,我使用以下格式从不同的mysql数据库检索跨两个表共享列值的数据

SELECT <...>
FROM A.table1 t1 JOIN B.table2 t2 ON t2.column2 = t1.column1;
选择
从A.table1t1连接B.table2t2在t2.column2=t1.column1上;
我想从表中获取相同日期、小时和分钟的共享值。然而,我意识到,由于来自不同数据库的两个表的时间戳列中的时间戳值在记录的秒数方面略有不同,因此我无法检索任何常见数据。如何修改查询,以便在忽略时间戳列的“秒”部分的同时,查询来自两个不同数据库的两个表之间关于时间戳值的公共数据

 ON t2.datestamp BETWEEN t1.datestamp - INTERVAL 2 SECOND
                     AND t1.datestamp + INTERVAK 2 SECOND
对于
JOIN
操作中的
ON
子句。这将为比赛留出4秒钟的时间

当然,如果您将窗口设置得太宽,您可能会丢失一些不需要的匹配项,如果您将窗口设置得太窄,您可能会丢失一些匹配项。

您可以使用

 ON t2.datestamp BETWEEN t1.datestamp - INTERVAL 2 SECOND
                     AND t1.datestamp + INTERVAK 2 SECOND
对于
JOIN
操作中的
ON
子句。这将为比赛留出4秒钟的时间


当然,如果你把窗口设置得太宽,你会得到一些你不想要的匹配项,如果你把窗口设置得太窄,你会错过一些匹配项。

虽然我认为O.Jones的答案是解决问题的更好方法,但如果你真的需要比较两个时间戳“忽略“秒”部分”,你可以做以下事情:

SELECT <...>
FROM A.table1 t1
JOIN B.table2 t2
  ON t2.column2 BETWEEN date_format(t1.column1, '%Y-%m-%d %H:%i:00')
                    AND date_format(t1.column1, '%Y-%m-%d %H:%i:59')
选择
来自A.1表t1
加入B.table2t2
在t2.column2上,日期与格式之间(t1.column1,“%Y-%m-%d%H:%i:00”)
和日期格式(t1.column1,“%Y-%m-%d%H:%i:59”)
或者更准确地说:

  ON  t2.column2 >= date_format(t1.column1, '%Y-%m-%d %H:%i:00')
  AND t2.column2 <  date_format(t1.column1, '%Y-%m-%d %H:%i:00') + interval 1 minute
t2.column2>上的
=日期\u格式(t1.column1,“%Y-%m-%d%H:%i:00”)
和t2.column2

t2.column2>上的
=t1.column1-间隔秒(t1.column1)秒
t2.column2
虽然我认为O.Jones的答案是解决问题的更好方法,但如果您确实需要比较两个时间戳“忽略“秒”部分”,您可以执行以下操作:

SELECT <...>
FROM A.table1 t1
JOIN B.table2 t2
  ON t2.column2 BETWEEN date_format(t1.column1, '%Y-%m-%d %H:%i:00')
                    AND date_format(t1.column1, '%Y-%m-%d %H:%i:59')
选择
来自A.1表t1
加入B.table2t2
在t2.column2上,日期与格式之间(t1.column1,“%Y-%m-%d%H:%i:00”)
和日期格式(t1.column1,“%Y-%m-%d%H:%i:59”)
或者更准确地说:

  ON  t2.column2 >= date_format(t1.column1, '%Y-%m-%d %H:%i:00')
  AND t2.column2 <  date_format(t1.column1, '%Y-%m-%d %H:%i:00') + interval 1 minute
t2.column2>上的
=日期\u格式(t1.column1,“%Y-%m-%d%H:%i:00”)
和t2.column2

t2.column2>上的
=t1.column1-间隔秒(t1.column1)秒
t2.column2
2018-01-21 23:29:59
2018-01-21 23:30:00
怎么样?差异只有一秒钟。您试图加入的列中有一列可能与时间戳有关吗?@Paul:这是个好主意,但我已经编写了python脚本,在0或30分钟时将值记录在SQL数据库中,因此不太可能出现时间稍早的情况。我得到的秒数的轻微延迟可能是因为我的脚本正在使用这些秒数从传感器接收数据。那么
2018-01-21 23:29:59
2018-01-21 23:30:00
呢?差异只有一秒钟。您试图加入的列中有一列可能与时间戳有关吗?@Paul:这是个好主意,但我已经编写了python脚本,在0或30分钟时将值记录在SQL数据库中,因此不太可能出现时间稍早的情况。我得到的秒数的轻微延迟可能是因为我的脚本正在使用这些秒数从传感器接收数据。感谢您的帮助并提及此方法的警告。我已将间隔增加到10秒,并检索了一些“共享”行。不过,我将再次查看这些表,以防出现数据记录间隔超过10秒的情况,我可能会错过建议的数据。@Craver2000-并且间隔越宽,匹配不应该匹配的行的可能性就越大。谢谢你的帮助,并提到了这个方法的注意事项。我已将间隔增加到10秒,并检索了一些“共享”行。不过,我将再次查看这些表,以防出现数据记录间隔超过10秒的情况,我可能会错过建议的数据。@Craver2000-并且间隔越宽,匹配不应该匹配的行的可能性就越大。吉戈。