gpt4 book ai didi

sql查询以获取给定列集的最新数据

转载 作者:行者123 更新时间:2023-11-29 13:34:40 25 4
gpt4 key购买 nike

我有一个 postgres 表,代表我表中“元素”的历史记录。一个元素由一组 2 列决定

历史数据有像“保存”或“删除”这样的 Action ,对于任何元素都可能发生很多次。这些是相互排斥的,所以当我查看当前状态时,关心最近的操作。

我想计算一个元素的“已保存”事件的数量。这需要是为每个元素“保存”的最近历史事件的计数。是否有一个 SQL 查询可以很好地完成这一任务?我有 2 个要压缩。

表格列: 时间(时间戳), user_id (整数), 文件名(字符串), Action 类型(字符串)

user_id + file_name 组合确定了我关心的“元素”,但这个组合在表中不是唯一的

我想要的:获取所有最近“保存”为他们的操作的用户的文件“index.html”的计数

最佳答案

您可以使用如下所示的内容。它首先过滤掉 index.html 的所有 SAVED 记录。然后它会丢弃那些存在同一用户和文件的新记录的任何记录。

因此,如果用户 1 在 09:00 和 12:00 保存了文件,则只计算 12:00 的记录。

select count(*) from tableName t
where t.action_type = 'SAVED'
and t.filename = 'index.html'
and not exists
(select * from tableName t2
where t2.user_id = t.user_id and t2.filename = t.filename
and t2.time > t.time
and t2.action_type = 'SAVED')

如果您希望更新的删除记录停止保存计数,请删除 and t2.action_type = 'SAVED'

这样的话,如果用户 1 在 09:00 保存文件并在 11:00 删除它,则所有记录都不算数。删除的记录不包含在结果中(因为 t.action_type = 'SAVED'),但它比 09:00 的记录更新,因此停止显示。

关于sql查询以获取给定列集的最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15779347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com