1

我需要运行一些讨厌的查询;但我就是想不出该怎么做。

所以我有一张桌子叫:

playtime

列用于:

playtime_id -> auto-incrementing
date -> date of entry
player_name
join_or_leave -> possible values are 'join' or 'leave'

我需要在查询中获得的是每个用户(player_name)的最新条目,其中“join_or_leave”等于“join”,但前提是该用户的最新条目是“join”。因此,如果用户的最新值为“离开”,它会忽略该用户。

4

3 回答 3

1

自加入只会为您提供 max 的结果date。并且使用附加where子句,只有在最大日期记录中也有“加入”时,加入才会成功join_or_leave

select p1.player_name
from playtime p1
inner join 
(
  select player_name, max(date) as mdate
  from playtime
  group by player_name
)
p2 on p1.player_name = p2.player_name and p1.date = p2.mdate 
where p1.join_or_leave = 'join'
于 2013-08-03T18:18:54.577 回答
0

您可以通过聚合和 MySQL 中的技巧来做到这一点:

select player_name
from playtime
group by player_name
having substring_index(group_concat(join_or_leave order by date desc), ',', 1) = 'join'

也就是说,将这些join_or_leave值连接到一个列表中,按date降序排列(对于 each player_name)。然后只需选择其中的那些join

于 2013-08-03T20:07:58.727 回答
0

好的,只需在您的表中添加一个时间戳列并根据时间戳进行比较。查询将是

SELECT * FROM playtime WHERE join_or_leave = join ORDER BY timestamp

然后用您使用的脚本语言解析结果以获取表中的最新条目

于 2013-08-03T18:25:52.017 回答