次のような新しいデータで定期的に更新されるかなり大きなテーブルがあります。
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-13 20:26:25
3 | steve | 44 | 31 | 33 | 35 | 2013-01-13 20:26:25
4 | miley | 34 | 44 | 47 | 48 | 2013-01-14 08:26:25
5 | john | 27 | 53 | 49 | 52 | 2013-01-14 08:26:25
6 | steve | 27 | 62 | 50 | 64 | 2013-01-14 08:26:25
7 | miley | 44 | 54 | 57 | 87 | 2013-01-14 20:26:25
8 | john | 37 | 93 | 59 | 62 | 2013-01-14 20:26:25
9 | steve | 85 | 71 | 87 | 74 | 2013-01-14 20:26:25
...etc
毎日、各列の差が最も大きかったのは誰かを見つけるためのクエリが必要です。(たとえば 14 日 - スティーブは c1 と c3 で最大の増加、ジョンは c2、マイリーは c4)。各人の数は常に増加しているため、どの日の最初のエントリも、その日の最後のエントリより常に少なくなると想定できます。
誰かが少なくとも私を正しい方向に向けることができれば、ほとんど成功せず、あまり進んでいないいくつかのクエリを実行しようとしましたか?
望ましい出力は、最大の増加を示した名前と差異を含む各行の配列であることが理想的です。これらすべてを 1 つのクエリで実行できるかどうかはわかりませんが、実際に必要なのは、各列で最大の増加を示した人物の名前と、その差が何であったかだけです。
.
壊す
14 日にすべての人の最初と最後のエントリを取得する必要があります (id: 4 から 9)。c1 値の差を比較し、差が最も大きい人の名前を返します。c2、c3、および c4 について繰り返します。
これまでのところ、1列のみを取得しようとしているorangecrushのおかげです:(エラー:グループ関数の無効な使用)
"SELECT nm, diff_c1 FROM (
SELECT NAME nm, MAX(c1) - MIN(c1) DIFF_C1 FROM TABLE AS a
WHERE `time` > DATE_SUB(now(), INTERVAL 1 DAY)
GROUP BY NAME) AS c
WHERE diff_c1 = (
(SELECT max(MAX(c1) - MIN(c1)) FROM TABLE AS b
WHERE `time` > DATE_SUB(now(), INTERVAL 1 DAY) GROUP BY NAME)
)"