这是我的表结构
所以我在表格中有这些列:
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
的变量中帮助将不胜感激。
答案 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);
对于每条记录,此查询将检查是否存在时间戳更新的同一用户的另一条记录。如果有,我们想忽略该记录。我们只希望不存在具有更近期活动的记录的行。以这种方式思考它有点奇怪,但逻辑是等价的。
默认情况下,此查询只会为每个用户抓取一行,因此不需要分组。 (如果两个记录的时间戳完全相同,这确实有点毛茸茸。在这种情况下,不会撤回任何记录)