为每个用户 ID MS Sql Server 选择最新的日期时间

发布于 2024-11-05 01:19:15 字数 243 浏览 0 评论 0原文

我有一张桌子用来聊天。其中有一个名为 userid 的字段和一个名为 timesent 的字段。我需要知道表中每个用户 ID 的最新发送时间,以便如果他们 3 分钟没有说话,我可以将其从表中删除,在这种情况下我会假设他们已经消失了。

我真的无法破解这个坚果...我该如何查询。

我当然可以将其拆分并首先选择所有用户 ID,然后循环它们并在我的方法中选择前 1 次发送,但我想知道单独的 sql 是否可以做到这一点,所以我不需要执行大量查询。

I have a table used for a chat. Among others there is a field called userid and a field called timesent. I need to know the latest timesent for each userid in the table, so that I can delete them from the table if they haven't said anything for 3 minutes, in which case I will assume they are gone.

I can't really crack this nut... How do I query.

I could of course split it up and first select all the userids and then loop through them and select top 1 timesent in my method, but I was wondering if sql alone can do the trick, so I don't need to execute tons of queries.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

所谓喜欢 2024-11-12 01:19:15

要获取每个 userid 的最新 timesent,您可以使用 MAX

SELECT userid, MAX(timesent) AS timesent
FROM your_table
GROUP BY userid

或者执行指定的 delete,您可以使用

DELETE your_table 
FROM   your_table y1 
WHERE  NOT EXISTS(SELECT * 
                  FROM   your_table y2 
                  WHERE  y2.userid = y1.userid 
                         AND y2.timesent >= DATEADD(MINUTE, -3, GETDATE()))  

To get the latest timesent per userid you can use MAX

SELECT userid, MAX(timesent) AS timesent
FROM your_table
GROUP BY userid

Or to do the specified delete you can use

DELETE your_table 
FROM   your_table y1 
WHERE  NOT EXISTS(SELECT * 
                  FROM   your_table y2 
                  WHERE  y2.userid = y1.userid 
                         AND y2.timesent >= DATEADD(MINUTE, -3, GETDATE()))  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文