1

実行する必要があるちょっと厄介なクエリがあります。しかし、私はそれを行う方法を考えることができません。

だから私はと呼ばれるテーブルを持っています:

playtime

次の列を使用:

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

クエリで取得する必要があるのは、「join_or_leave」が「join」に等しいすべてのユーザー (player_name) の最新のエントリですが、そのユーザーの最新のエントリが「join」である場合のみです。そのため、ユーザーの最新の値が「leave」である場合、そのユーザーは無視されます。

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

テーブルにタイムスタンプ列を追加し、タイムスタンプに従って比較するだけです。クエリは次のようになります

SELECT * FROM playtime WHERE join_or_leave = join ORDER BY timestamp

次に、使用しているスクリプト言語で結果を解析して、テーブルの最新のエントリを取得します

于 2013-08-03T18:25:52.017 に答える