【发布时间】:2022-07-05 23:19:54
【问题描述】:
我们正在处理来自恶意软件实验室感染的数据库存储的、经过 Bro 处理的网络事件,以便用数据填充 MISP 实例。底层数据库系统是PostgreSQL。
我们有更新 MISP 端的代码工作正常,但由于存在 吨 具有不同时间戳的重复事件,我们可以为不同的 ip 和端口对获得数千个数据结果。
值的示例类似于(注意:数据类型包含在表中的标题行中,以便清楚地了解其在 SQL DB 中的存储方式):
| ts (timestamp w/ timezone) | resp_h (inet) | resp_p (integer) |
|---|---|---|
| 2022-07-05 07:37:50.869766 +00:00 | 52.254.114.69 | 443 |
| 2022-07-05 06:29:37.149036 +00:00 | 64.62.200.237 | 443 |
| 2022-07-05 06:29:24.205741 +00:00 | 64.62.200.237 | 443 |
| ... |
我们可以从我们的表格中选择如下数据,这些数据是“不同的”(注意INFECTIONID 是一个整数值,表示系统中的特定感染 ID):
SELECT DISTINCT ts, resp_h, resp_p
FROM bro_data WHERE infection=INFECTIONID
AND resp_h IS NOT NULL
AND resp_p IS NOT NULL
ORDER BY ts DESC
现在,我几乎可以肯定我们可以进一步缩小范围,但我不完全确定如何去做。我想做的是缩小数据列表的范围,以便我们为每个只有一个时间戳的 resp_h 和 resp_p 值获得 一个 记录 - 记录的最新时间戳。
使用上面数千个示例值,所需的结果将是恰好返回两个值(再次,数据值类型以及与上表保持一致的标头):
| ts (timestamp w/ timezone) | resp_h (inet) | resp_p (integer) |
|---|---|---|
| 2022-07-05 07:37:50.869766 +00:00 | 52.254.114.69 | 443 |
| 2022-07-05 06:29:37.149036 +00:00 | 64.62.200.237 | 443 |
我的 SQL 经验不如 Python 经验丰富,我希望 不 必须在 Python 代码中预处理数以千计的数据值,以便将数据处理为 MISP 事件在我们这边。有没有人可以帮助指导我使用正确的 SQL 搜索语法来获得所需的结果?
【问题讨论】:
标签: postgresql