对于表中的每一行,选择另一个表中由值连接的最近日期

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 subquerytop 的选项:

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 个连接选择的表中删除文件?

在excel工作表中为父表中的每一行打印子表数据

Oracle:将两个表与一个公共列加上第二个表中的一个附加列(最新生效日期)连接以选择其他列

jQuery - 检查空输入有效,但只检查表中的第一行

冒险工作日期和随机时间从现有表中连接,但每行获得相同的值