Sql 按t1.datetime和MAX(t2.datetime)连接表
我在用datetime列连接两个表时遇到问题 我需要加入一些类似Table1.datetime>MAXTable2.datetime的内容。 我没有其他可以加入的专栏。你能帮我吗 370000行以上的表1示例:Sql 按t1.datetime和MAX(t2.datetime)连接表,sql,join,sql-server-2008-r2,max,Sql,Join,Sql Server 2008 R2,Max,我在用datetime列连接两个表时遇到问题 我需要加入一些类似Table1.datetime>MAXTable2.datetime的内容。 我没有其他可以加入的专栏。你能帮我吗 370000行以上的表1示例: timestamp data1 data2 data3 ----------------------- ----- ----- ----- 2011-05-09 08:55:19.990 x1 w12 j3 2011-05-09 0
timestamp data1 data2 data3
----------------------- ----- ----- -----
2011-05-09 08:55:19.990 x1 w12 j3
2011-05-09 08:56:19.990 x4 w22 j3
2011-05-09 08:57:19.990 x5 w23 j3
2011-05-09 08:58:19.990 x7 w25 j3
2011-05-09 08:59:19.990 x2 w19 j3
2011-05-09 09:01:19.990 x3 w18 j3
timestamp data8
----------------------- -----
2011-05-09 07:55:11.990 y1
2011-05-09 07:56:13.990 y9
2011-05-09 08:17:14.990 y3
2011-05-09 08:28:15.990 y8
2011-05-09 08:59:16.990 y5
2011-05-09 09:02:19.990 y6
超过2000行的表2示例:
timestamp data1 data2 data3
----------------------- ----- ----- -----
2011-05-09 08:55:19.990 x1 w12 j3
2011-05-09 08:56:19.990 x4 w22 j3
2011-05-09 08:57:19.990 x5 w23 j3
2011-05-09 08:58:19.990 x7 w25 j3
2011-05-09 08:59:19.990 x2 w19 j3
2011-05-09 09:01:19.990 x3 w18 j3
timestamp data8
----------------------- -----
2011-05-09 07:55:11.990 y1
2011-05-09 07:56:13.990 y9
2011-05-09 08:17:14.990 y3
2011-05-09 08:28:15.990 y8
2011-05-09 08:59:16.990 y5
2011-05-09 09:02:19.990 y6
因此,表1和表2中的数据应具有以下值:
timestamp data1 data2 data3 timestamp data8
----------------------- ----- ----- ----- ----------------------- -----
2011-05-09 08:55:19.990 x1 w12 j3 2011-05-09 08:28:15.990 y8
2011-05-09 08:56:19.990 x4 w22 j3 2011-05-09 08:28:15.990 y8
2011-05-09 08:57:19.990 x5 w23 j3 2011-05-09 08:28:15.990 y8
2011-05-09 08:58:19.990 x7 w25 j3 2011-05-09 08:28:15.990 y8
2011-05-09 08:59:19.990 x2 w19 j3 2011-05-09 08:59:16.990 y5
2011-05-09 09:01:19.990 x3 w18 j3 2011-05-09 08:59:16.990 y5
如果我正确理解了您的问题,您需要将整个表2连接到表1的每一行,其中Table1.timestamp>MaxTable2.timestamp?下面的查询应该可以解决这个问题,但是你可能需要澄清这个问题
Select * from Table1 t1, Table2 t2
Where t1.timestamp > (select MAX(t3.timestamp) from Table2 t3)
将选项与交叉运算符和顶部运算符一起使用
SELECT *
FROM dbo.Table1 t1 CROSS APPLY (
SELECT TOP 1 t2.[TIMESTAMP], t2.data8
FROM dbo.Table2 t2
WHERE t2.[TIMESTAMP] < t1.[TIMESTAMP]
ORDER BY t2.[TIMESTAMP] DESC
) o
请参见“您使用的是什么数据库系统?”的演示。MS SQL Server 2008 R2I需要将整个表1与表2.timestamp和T2连接起来。timestamp必须是表1.timestamp之前的最后一个时间戳。因此,为了简化:我从表1中得到了日期,例如2012-05-01。表2的日期为2012-01-01、2012-02-012-04-302012-05-05。选择应该加入表1=>2012-05-01=>2012-04-30这样的表2。日期2012-04-30是表1给出的日期之前的最后一个日期。