对于表中的每一行,选择另一个表中由值连接的最近日期
Posted
技术标签:
【中文标题】对于表中的每一行,选择另一个表中由值连接的最近日期【英文标题】:For each row in a table select the most recent date in another table joined by a value 【发布时间】:2016-08-22 16:14:58 【问题描述】:我有以下 2 个表格:
Table1 Table2
ID IP Timestamp IP Login User
1 10.2.4.8 02/04/2016 9.10 10.2.4.8 01/04/2016 8.20 Green
2 10.2.4.8 02/04/2016 13.50 10.2.4.8 01/04/2016 8.50 Blue
3 10.20.3.5 02/04/2016 13.59 10.2.4.8 02/04/2016 9.20 Red
4 10.2.4.8 03/04/2016 10:25 10.20.3.5 04/04/2016 11:25 Blue
5 10.20.3.5 04/04/2016 11:25 10.20.3.5 01/04/2016 10:25 Yellow
我想将 Table1 中的时间戳与来自 Table2 的最近一次登录匹配,其中 IP 相同,以便获取进行登录的用户。所以结果应该是这样的:
ID IP Timestamp User
1 10.2.4.8 02/04/2016 9.10 Blue
2 10.2.4.8 02/04/2016 13.50 Red
3 10.20.3.5 02/04/2016 13.59 Yellow
4 10.2.4.8 03/04/2016 10:25 Red
5 10.20.3.5 04/04/2016 11:25 Blue
我正在使用 SQL。感谢您的帮助
我想出的解决方案是这样的:
SELECT T1.ID, T1.IP, T2.user, MAX (T2.Login) AS Ultimo_Timestamp, T1.timestamp FROM Table2 T2, Table1 T1
WHERE T2.IP = T1.IP
AND T2.Login < T1.timestamp
GROUP BY T1.ID, T1.IP, T2.user, T1.timestamp
ORDER BY T1.ID;
我不确定它是否正确,以及是否有更好的解决方案。谢谢
【问题讨论】:
您将时间戳存储在适当的数据类型下,对吗?很好,所以向我们展示你的尝试。 嗨草莓,我想出了这个代码,但我真的不确定它是否可以。 : SELECT T1.ID, T1.IP, T2.user, MAX (T2.Login) AS Ultimo_Timestamp, T1.timestamp FROM Table2 T2, Table1 T1 WHERE T2.IP = T1.IP AND T2.Login 【参考方案1】:这是一个使用correlated subquery
和top
的选项:
select t.id, t.ip, t.timestamp,
(select top 1 t2.user
from table2 as t2
where t.ip = t2.ip
and t2.timestamp < t.timestamp
order by t2.timestamp desc) as user
from table1 as t
【讨论】:
为什么要发布零努力问题的答案? 嗨@sgeddes,谢谢,它看起来正确,但我得到“子查询只能返回 1 条记录。”错误。我正在使用访问权限,我在问题中更新的解决方案是否也正确?再次感谢以上是关于对于表中的每一行,选择另一个表中由值连接的最近日期的主要内容,如果未能解决你的问题,请参考以下文章
SQL select:一个表中的随机顺序值用于另一个表中的每一行
如何从 MSDE 2000 中由 3 个连接选择的表中删除文件?