SQL Query返回每个用户的最新行

时间:2014-06-12 20:50:56

标签: mysql sql

这是我的表结构

所以我在表格中有这些列:

UserId   Location   Lastactivity

让我们说有4个结果,UserId为1,每个位置都不同。让我们说

index.php, chat.php, test.php, test1.php

。然后还有时间戳。

让我们再添加一个UserId为4位chat.php和任何时间。

时间是timestamp格式。

我想得到它,以便我的sql查询显示每个用户ID的一个结果,但只显示最新的一个。所以在2中它会显示最近添加到表中的行。此外,我不希望它显示任何具有15分钟或更长时间的最后活动的结果。

对于示例,我只是显示返回的两行。

有谁知道我应该做什么?

我试过了:

SELECT * FROM session WHERE location='chat.php' GROUP BY userid 

返回两个结果,但我相信如果userid有多个结果,它会返回一个随机结果,它也会返回最后一个结果超过15分钟的结果。

我正在使用mysql

------更多信息-------

我想在数据库中查询location =' chat.php'的所有行。我只希望每个用户ID占一行,这取决于最近提交的内容。然后我也不想要任何超过15分钟的东西。最后,我想计算返回的行数,并将它们放入一个名为testVar

的变量中

帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

基本上你要找的东西归结为你想要用最新时间戳的用户名和位置。因此,您要忽略上次活动不是最大的所有记录。

Select sum(1) as testVar
From session s
Where location='chat.php'
and datediff(minute, s.lastactivity, getdate()) < 15
and  not exists (Select *
                            From session s2
                            Where s.userid = s2.userid
                            and   s2.lastactivity > s.lastactivity);

对于每条记录,此查询将检查是否存在时间戳更新的同一用户的另一条记录。如果有,我们想忽略该记录。我们只希望不存在具有更近期活动的记录的行。以这种方式思考它有点奇怪,但逻辑是等价的。

默认情况下,此查询只会为每个用户抓取一行,因此不需要分组。 (如果两个记录的时间戳完全相同,这确实有点毛茸茸。在这种情况下,不会撤回任何记录)