【问题标题】:Merging two tables by date-time sql按日期时间sql合并两个表
【发布时间】:2016-06-17 04:18:53
【问题描述】:

我是 SQL 新手,我需要一个查询来连接两个具有特定条件的表。这两个表是: 表一:

visitIp         serverTimePretty    lastActionDateTime
66.87.114.131   8/12/2015 22:59     8/13/2015 2:59
66.87.114.131   8/12/2015 20:32     8/13/2015 0:32
66.87.114.131   8/12/2015 19:34     8/12/2015 23:34
66.87.114.131   12/13/2015 17:36    12/13/2015 22:36
66.87.114.131   4/23/2016 10:25     4/23/2016 14:27

表2:

IPAddress   StartDate
66.86.114.131   4/23/2016 8:25
66.70.114.131   4/23/2016 8:25
66.71.114.131   4/23/2016 8:25
66.72.114.131   4/23/2016 8:25
66.87.114.131   4/23/2016 8:25

IP 地址是 Tabe 2 中的主键,它引用 Tabe 1 中的 VisitIp。现在我想要 Table1.visitIp= Table2.IPAddress 和 Table1.serverTimePretty - Table2.StartDate >= 2 小时的列。什么是 SQL 查询。

【问题讨论】:

  • 哪个 RDBMS?您已标记 3 个。
  • 哪个 RDBMS?您已标记 3 个。

标签: mysql sql sql-server oracle-sqldeveloper


【解决方案1】:

您可以在 sql server 中使用 DATEDIFF 进行如下操作:

SELECT t1.*, t2.*
FROM Table_1 t1 INNER JOIN Table_2 t2
    ON t1.visitIp = t2.IPAddress AND
       DATEDIFF(hour, t1.serverTimePretty, t2.StartDate) >= 2

编辑

如前所述,您没有提及您使用的是什么类型的数据库。对于 oracle,以下查询将起作用,Oracle 直接提供您在两个日期之间进行减法:

SELECT t1.*, t2.*
FROM Table_1 t1 INNER JOIN Table_2 t2
    ON t1.visitIp = t2.IPAddress AND
       floor((date1-date2)*24) >= 2

【讨论】:

  • 它说:没有这样的列:小时
  • 即使我将它作为独立语句运行,它也会给出相同的错误。选择 DATEDIFF(小时,'2014-06-05','2014-08-05')。从 w3schools 拿了这个,它显示了同样的错误。
  • 显然 DATEDIFF 不适用于 Oracle 数据库
【解决方案2】:

在您的加入条件中使用 DATE_ADD()INTERVAL 2 HOUR

SELECT t1.*, t2.*
FROM Table_1 t1 INNER JOIN Table_2 t2
    ON t1.visitIp = t2.IPAddress AND
       t1.serverTimePretty >= DATE_ADD(t2.StartDate, INTERVAL 2 HOUR)

【讨论】:

  • 它显示了一些语法错误。它在日期匹配条件下,就像我在没有 And 部分的情况下运行它时那样工作正常
  • 我给了你一个 MySQL 答案。在 SQL Server 或 Oracle 中答案会有所不同。
  • 好吧,,,会试试
猜你喜欢
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 2018-08-11
  • 2017-02-07
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多