0

私はこれで数時間無駄になりましたが、髪を引っ張っています。

編集: 各ユーザーの最大の「ゲイン」を計算するために、1 日前の同じデータを使用して、overall_exp 列の差を計算したいと考えています。

現在、私は行を取り、最初の行のタイムスタンプに基づいて1日前から行を選択し、2行からoverall_exp列を減算し、user_idでグループ化しながらその結果で並べ替えます

SQL フィドル: http://sqlfiddle.com/#!2/501c8

これが私が現在持っているものですが、ロジックが完全に間違っているため、0の結果を取得しています

SELECT rsn, ts.timestamp, @original_ts := SUBDATE( ts.timestamp, INTERVAL 1 DAY), ts.overall_exp, ts.overall_exp - previous.overall_exp AS gained_exp
    FROM tracker AS ts
INNER JOIN (
    SELECT user_id, MIN( TIMESTAMP ) , overall_exp
    FROM tracker
    WHERE TIMESTAMP >= @original_ts
    GROUP BY user_id
) previous 
    ON ts.user_id = previous.user_id
JOIN users
    ON ts.user_id = users.id
GROUP BY ts.user_id
ORDER BY gained_exp DESC
4

2 に答える 2

1

試す:

select u.*, max(t.`timestamp`)-min(t.`timestamp`) gain
from users u
left join tracker t 
on u.id = t.user_id and
   t.`timestamp` >= date_sub(date(now()), interval 1 day) and
   t.`timestamp` < date_add(date(now()), interval 1 day)
group by u.id
order by gain desc

ここでSQLFiddle 。

于 2013-05-11T16:18:36.407 に答える
1

自己結合でこれを行うことができます:

select t.user_id, max(t.overall_exp - tprev.overall_exp)
from tracker t join
     tracker tprev
     on tprev.user_id = t.user_id and
        date(tprev.timestamp) = date(SUBDATE(t.timestamp, INTERVAL 1 DAY))
group by t.user_id

ここで重要なのは、タイムスタンプを日付に変換することです。したがって、比較は正確です。

于 2013-05-11T16:17:11.410 に答える