如何将以下表格合并到此结果中?
结果应该是非常idUnit的一行,其最新日期与表2匹配该行的匹配ID。
我设法将表格合并,但不是基于最新日期。
示例数据:
Table1
id idUnit Date extra
1 1 2017-01-23 01:00:00 a
2 1 2017-01-23 02:00:00 b
3 2 2017-01-23 01:00:00 c
4 2 2017-01-23 02:00:00 d
Table2
id date extra2
1 2017-01-23 01:00:00 w
2 2017-01-23 02:00:00 x
3 2017-01-23 01:00:00 y
4 2017-01-23 02:00:00 z
Result
id idUnit Date extra extra2
2 1 2017-01-23 02:00:00 b x
4 2 2017-01-23 02:00:00 d z
答案 0 :(得分:0)
请使用现代JOIN语法,而不是使用逗号分隔的表格与WHERE。
所以你的SQL变成了
select t1.id, t1.idUnit, MAX(t1.date), t1.?, t2.? from table1 t1 INNER JOIN table2 t2
ON t1.id = t2.id and t1.date = t2.date
GROUP BY t1.id, t1.idUnit, t1.?, t2.?
请注意,您必须在GROUP BY中包含所需的所有其他字段(我有t1。?和t2。?作为占位符)
修改
看过示例数据后,请尝试以下操作。如果您使用的是SQL Server,则可以复制整个内容并粘贴到查询窗口中。下面使用的相同类型的子查询方法可以在任何db中完成。
declare @table1 table
(
id int,
idUnit int,
tDate datetime,
extraCol varchar(10)
)
declare @table2 table
(
id int,
tDate datetime,
extraCol varchar(10)
)
INSERT INTO @table1 VALUES(1, 1, '2017-01-23 01:00:00', 'a')
INSERT INTO @table1 VALUES(2, 1, '2017-01-23 02:00:00', 'b')
INSERT INTO @table1 VALUES(3, 2, '2017-01-23 01:00:00', 'c')
INSERT INTO @table1 VALUES(4, 2, '2017-01-23 02:00:00', 'd')
INSERT INTO @table2 VALUES(1, '2017-01-23 01:00:00', 'w')
INSERT INTO @table2 VALUES(2, '2017-01-23 02:00:00', 'x')
INSERT INTO @table2 VALUES(3, '2017-01-23 01:00:00', 'y')
INSERT INTO @table2 VALUES(4, '2017-01-23 02:00:00', 'z')
SELECT t1.id, t1.idUnit, t1.tDate, t1.extraCol, t2.extraCol FROM @table1 t1
INNER JOIN @table2 t2 ON t1.id = t2.id and t1.tDate = t2.tDate
INNER JOIN
(SELECT idUnit, MAX(tDate) as maxDate FROM @table1
GROUP By idUnit) m
ON t1.idUnit = m.idUnit and t1.tDate = m.maxDate
ORDER BY id
答案 1 :(得分:0)
试试这个。在这里,这两个表使用Inner join连接。
SELECT MAX(t1.date) FROM table1 INNER JOIN table2
ON table2.id = table1.id and table1.date= table2.date;
答案 2 :(得分:0)
实际上你的问题主要是关于如何获得每个idUnit的Max(id) - 之后,Join只是根据ID列(简单的内部连接) 如果您的数据库支持它,最简单的解决方案是使用窗口函数(按日期按IDUnit顺序分区)
如果您的数据库尚不支持它(如MySQL 5.7),那么您可以使用一些嵌套查询来查找每个idUnit的最大日期行。 (注意它通常要慢得多......)
的问候,
尊利