1

こんな感じのテーブルがあります

id  |  name  |  c1  |  c2  |  c3  |  c4  |  time
-------------------------------------------------
 1  |  miley |  23  |  11  |  21  |  18  |  2013-01-13 20:26:25
 2  |  john  |  31  |  29  |  23  |  27  |  2013-01-14 20:26:25
 3  |  steve |  44  |  31  |  33  |  35  |  2013-01-14 20:26:25
 4  |  miley |  34  |  44  |  47  |  48  |  2013-01-15 08:26:25
 5  |  john  |  27  |  53  |  49  |  52  |  2013-01-15 08:26:25
 6  |  steve |  27  |  62  |  50  |  64  |  2013-01-16 08:26:25
 7  |  miley |  44  |  54  |  57  |  87  |  2013-01-16 20:26:25
 8  |  john  |  37  |  93  |  59  |  62  |  2013-01-17 20:26:25
 9  |  steve |  85  |  71  |  87  |  74  |  2013-01-17 20:26:25
...etc

*注: これは、テーブルがどのように見えるかを示すために作成したランダムなテーブルです

特定の日付範囲で特定の列に最大の変化があった人の名前を取得する必要があります。私は、1つを機能させることができないという理由で、さまざまなクエリを試しました。私の最も近い解決策は次のようなものだと思います...

SELECT table1.name, MAX(table1.c1-h.c1) as maxDiff 
FROM table_a as table1
LEFT JOIN table_a as table2 
ON table2.name=table1.name AND table1.c1>table2.c1
WHERE table2.c1 IS NOT NULL

私は何を間違っていますか?明確にするために、日付の範囲を選択して、決定された列でその日付範囲の最大の違いを誰が持っているかを判断できるようにしたいと考えています。また、データは時間の経過とともに増加することにも注意してください。そのため、任意の日の最初のキャプチャは常に、その人物のその日の最後のキャプチャになります。

4

2 に答える 2

2

ネストされたクエリが必要になるようです。最初に、日付範囲内の各人の測定値についてクエリを実行し、次に最大のもので並べ替えて上位 1 つを取得します...このようなものがうまくいくかもしれません...

select
      PreGroupByName.`Name`,
      PreGroupByName.MaxC1 - PreGroupByName.MinC1 as MaxSpread
   from
      ( select 
              t1.`Name`,
              min( t1.c1 ) as MinC1,
              max( t1.c1 ) as MaxC1
           from
              table_a t1
           where
              t1.`time` between '2013-01-01' and '2013-01-17'  -- or whatever date/time range
           group by
              t1.`Name` ) as PreGroupByName
   order by
      MaxSpread DESC
   limit 1
于 2013-01-24T01:25:20.137 に答える
1
SELECT
    `id`,`name`
    ,MAX(`c1`)-MIN(`c1`) AS `diff_c1`
    -- ,MAX(`c2`)-MIN(`c2`) AS `diff_c2`
    -- ,MAX(`c3`)-MIN(`c3`) AS `diff_c3`
    -- ,MAX(`c4`)-MIN(`c4`) AS `diff_c4`
FROM `the_table`
WHERE `time` BETWEEN '2013-01-13 20:26:25' AND '2013-01-17 20:26:25'
GROUP BY `name`
ORDER BY `diff_c1` DESC -- whichever you want to evaluate
LIMIT 1
于 2013-01-24T01:33:55.080 に答える