0

私はそのようなベンチマークを含むMySQLテーブルを持っています..

benchmarkid     playerid         verified     benchmark  resultnumber   testdate  

1               70               1            40msprint  6.0            2013-06-03      
2               70               1            40msprint  6.1            2013-06-04      
3               70               1            40msprint  6.3            2013-06-05  
4               71               1            40msprint  6.0            2013-06-03      
5               71               1            40msprint  6.1            2013-06-04      
6               71               1            40msprint  6.3            2013-06-05  

ベンチマーク「40msprint」の日付でそのテーブルをクエリして、その日付の現在の結果と、各プレーヤーのその時点での最後の既知の結果を取得したいと思います。

たとえば、2013-06-04 で、プレイヤー 70 と 71 の検証済み = 1 40msprint は次のようになります。

playerid    currentresult       previousresult  previousdate        
70          6.1                     6.0         2013-06-03      
71          6.1                     6.0         2013-06-03  

また、見つけたいプレーヤーIDもわかりますが、一度に約20しかありません。

これを取得するMySqlクエリのアイデアはありますか?

4

1 に答える 1

0

このテスト データが与えられた場合:

CREATE TABLE Table1
    (`benchmarkid` int, `playerid` int, `verified` int, `benchmark` varchar(9), `resultnumber` decimal(5,2), `testdate` date)
;

INSERT INTO Table1
    (`benchmarkid`, `playerid`, `verified`, `benchmark`, `resultnumber`, `testdate`)
VALUES
    (1, 70, 1, '40msprint', 6.0, '2013-06-03'),
    (2, 70, 1, '40msprint', 6.1, '2013-06-04'),
    (3, 70, 1, '40msprint', 6.3, '2013-06-05'),
    (4, 71, 1, '40msprint', 6.0, '2013-06-03'),
    (5, 71, 1, '40msprint', 6.1, '2013-06-04'),
    (6, 71, 1, '40msprint', 6.3, '2013-06-05'),
    (7, 70, 1, '40msprint', 6.1, '2013-06-06'),
    (8, 71, 1, '40msprint', 6.1, '2013-06-06'),

    (9, 71, 1, '40msprint', 6.3, '2013-06-02'),
    (10, 70, 1, '40msprint', 6.1, '2013-06-02')
;

このクエリは機能します:

select
t1.testdate as date,
t1.playerid,
t1.resultnumber,
t2.testdate as previous_date,
t2.resultnumber as previous_result
from
Table1 t1
left join Table1 t2 on t1.testdate > t2.testdate and t1.playerid = t2.playerid
where
t1.testdate = '2013-06-05'
and t2.testdate = (SELECT MAX(testdate) FROM Table1 WHERE Table1.testdate < t1.testdate)

結果:

|                        DATE | PLAYERID | RESULTNUMBER |               PREVIOUS_DATE | PREVIOUS_RESULT |
---------------------------------------------------------------------------------------------------------
| June, 05 2013 00:00:00+0000 |       70 |          6.3 | June, 04 2013 00:00:00+0000 |             6.1 |
| June, 05 2013 00:00:00+0000 |       71 |          6.3 | June, 04 2013 00:00:00+0000 |             6.1 |
  • sqlfiddleでライブで動作するのを見てください
于 2013-07-29T16:06:23.850 に答える