0

次のようなテーブル構造があります。

Id    Name      Rank      Date
-----------------------------------
1     test      1000      2012-1-11

2     test      7000      2012-1-10

3     test2     2000      2012-1-11

4     test2     200       2012-1-10

5     test3     4000      2012-1-10

6     test4     6500      2012-1-11

今日の日付が 2012-1-11 昨日の日付が 2012-1-10 であるとします。

単一のクエリで、今日と昨日の日付の各ユーザー名の違いを取得します。つまり、テストのランクは昨日が 7000 で、今日が 1000 です。したがって、結果は 6000 です。同様に、test2 は -1800 です。

次のような出力が必要です。

Name     Difference (Orderby the difference Desc)
--------------------
test      6000
test2     -1800

今日の日付または昨日の日付のレコードが利用できない場合、このレコードは計算に使用されません。

これは PHP MySQL で可能ですか?

4

2 に答える 2

3

これはどう?(あなたが達成しようとしていることはあまり明確ではありません..) コメントをお願いします。

コード:

select b.id, b.name, (b.rank-a.rank) diff
from t1 a
left join t1 b
on b.date < a.date
and b.name = a.name
having not diff is null
;

結果:

ID  NAME    DIFF
2   test    6000
4   test2   -1800

OPのコメントに従って編集します。

条件をトリガーするために、いくつかのレコードをサンプル テーブルに追加したことに注意してください。

コード 2:

select b.id, b.name,b.rank AS New,
b.Date new_date,
a.Rank as Old, a.date as old_date, 
(b.rank-a.rank) diff
from t1 a
left join t1 b
on b.name = a.name
where b.date > a.date and b.date <= Now()
and datediff(b.date, a.date) = 1
having not diff is null and diff <> 0
order by diff desc
;

結果:

ID  NAME    NEW     NEW_DATE            OLD     OLD_DATE            DIFF
3   test    8000    January, 12 2012    1000    January, 11 2012    7000
4   test2   2000    January, 11 2012    200     January, 10 2012    1800
1   test    1000    January, 11 2012    7000    January, 10 2012    -6000
于 2013-01-11T03:37:53.840 に答える
0

文字通り、必要なものはすべてこのページにあります

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

于 2013-01-11T03:32:54.690 に答える