Access SQL-如何获取最新记录和时间戳之前的最新记录?

什么

由于我在SQL方面的能力不强,因此我决定在这里进行首次发布,因为我坚持创建查询几天了,无法弄清楚如何正确地进行查询。我有一个表,该表以历史记录形式保存信息,以根据端口的时间戳保持IP地址以前的状态。我的Java程序正在使用此表来处理IP地址的状态。另外,当状态更改为任何IP地址时,我需要将ACTION DATE之前的最后一个显示为最后一次出现。

DST IP         | DST PORT | ACTION DATE         | STATUS
-------------------------------------------------------
0.0.0.0        |  80      | 2014.06.12. 9:22:27 | 4
10.146.203.184 |  80      | 2014.06.10. 8:43:51 | 4
10.146.203.184 |  80      | 2014.06.10. 8:43:41 | 4
10.146.203.184 |  80      | 2014.06.10. 8:28:35 | 0

我需要过滤表以根据唯一身份IP地址的最新状态显示它们。

我可以这样做:

SELECT 
    T1.[DST IP], T1.[DST PORT], MAX(T1.[ACTION DATE]) AS LASTDATE 
FROM 
    IP_BLOCK_LIST AS T1 
GROUP BY 
    T1.[DST IP], T1.[DST PORT]

但我还需要将给定IP和端口的ACTION DATE之前的最后一个显示为LAST OCCURRENCE。因此,我应该得到上述类似的信息:

DST IP       | DST PORT  | ACTION DATE         | STATUS | **LAST OCCURRENCE** 

0.0.0.0        |80       | 2014.06.12. 9:22:27 | 4      | 2014.06.12. 9:22:27 

10.146.203.184 |80       | 2014.06.10. 8:43:51 | 4      | 2014.06.10. 8:43:41

我有办法从表中获取最后一条记录:

SELECT TOP 1 [ACTION DATE]
FROM (SELECT TOP 2 * FROM IP_BLOCK_LIST ORDER BY [ACTION DATE] DESC)  AS T3
ORDER BY T3.[ACTION DATE]

但不适用于每个最新发生的ip端口。

寻求帮助会很棒,因为这使我难以理解。

谢谢。

伊斯特万

更新资料

我终于想到了这个查询:

SELECT T1.[DST IP], T1.RANGE, T1.[DST PORT], T1.STATUS, T1.NOTE, T1.SOURCE, T1.[BLOCK DIRECTION], T1.[ACTION DATE] AS [PERFORM DATE], Q1.[LAST OCCURRENCE] FROM IP_BLOCK_LIST AS T1 LEFT JOIN (SELECT Q2.[DST IP], Q2.[DST PORT], Max(Q2.[ACTION DATE]) AS [MaxOfACTION DATE], Min(Q2.[ACTION DATE]) AS [LAST OCCURRENCE] FROM (SELECT T2.[DST IP], T2.[DST PORT], T2.[ACTION DATE] FROM IP_BLOCK_LIST AS T2 WHERE (T2.[ACTION DATE]) In (SELECT TOP 2 T3.[ACTION DATE] FROM IP_BLOCK_LIST AS T3 WHERE T2.[DST IP] = T3.[DST IP] AND T2.[DST PORT] = T3.[DST PORT] ORDER BY [ACTION DATE] DESC )) AS Q2 GROUP BY Q2.[DST IP], Q2.[DST PORT]) AS Q1 ON (T1.[DST PORT] = Q1.[DST PORT]) AND (T1.[DST IP] = Q1.[DST IP]) WHERE (T1.[ACTION DATE]=[Q1].[MaxOfACTION Date])

可以简化一下吗?

戈登·利诺夫

您可以通过使用相关子查询来做到这一点:

select bl.*
from ip_block_list bl
where bl.[ACTION DATE] in (select top 2 bl2.[ACTION DATE]
                           from ip_block_list bl
                           where bl2.[DST IP] = bl.[DST IP] and
                                 bl2.[DST PORT] = bl.[DST PORT]
                           order by [ACTION DATE] desc
                          );

请注意,在平局的情况下,对于给定的IP,这将返回两个以上的记录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用联接在SQL Server中基于时间戳获取最新记录

来自分类Dev

Microsoft Access SQL - 选择记录的最新“版本”

来自分类Dev

sql记录获取最新记录-SQL Server

来自分类Dev

SQL Server:显示最新记录日期和时间

来自分类Dev

MS Access 2007 - 同步两个数据库并使用最新时间戳保持记录

来自分类Dev

SQL-如何获取每个帐户的最新记录

来自分类Dev

如何获取我的SQL查询以删除最新记录?

来自分类Dev

如何在SQL中获取最新的更新记录?

来自分类Dev

SQL获取每个ID的最新记录

来自分类Dev

通过SQL获取每个组的最新记录

来自分类Dev

从表中获取最新记录日期,SQL

来自分类Dev

SQL选择最新记录

来自分类Dev

如何通过sql中的最新日期获取用户名的最新记录

来自分类Dev

如何跟踪sql记录中的最新修改?

来自分类Dev

SQL:选择多个记录时如何只选择最新记录

来自分类Dev

CQL-按ID和最新时间戳获取记录

来自分类Dev

SQL左联接,最新记录

来自分类Dev

获取SQLite中最新时间戳的记录

来自分类Dev

获取SQLite中最新时间戳的记录

来自分类Dev

SQL从一组数据中获取最新记录

来自分类Dev

获取SQL Server中多个项目的最新记录

来自分类Dev

JPQL / SQL获取按列分组的最新记录

来自分类Dev

SQL获取具有与特定值匹配的最新关联的记录

来自分类Dev

获取SQL Server中多个项目的最新记录

来自分类Dev

SQL从一组数据中获取最新记录

来自分类Dev

SQL-获取ID的最新记录并保留空白列

来自分类Dev

SQL查询可通过多个分组获取最新记录

来自分类Dev

如何查询sql以获取同一日期的最新记录

来自分类Dev

如何编写 SQL 查询以使用 IN 子句获取第一条记录(最新)?

Related 相关文章

热门标签

归档