2012-02-08 13 views
2

毎朝、仕事中に起きている会議があります。誰がどのような順序で話すかを決定する方法として、最も近いオブジェクトを部屋の周りに投げる。やや奇妙なことに、私はこれらのスローについていくつかのデータを得ることが楽しいかもしれないと決めました。だから毎朝、私はスローの序列を覚えています(おそらく一度ボールだったボール/奇妙なスポンジオブジェクトを落としてしまった人や、すでにやっている人に投げてしまった人、 、そしてテーブルにこのデータを記録します。SQLクエリ - データのグループ化

+---------+-----+------------+----------+---------+----------+--------+--------------+ 
| throwid | day | date | thrownum | thrower | receiver | caught | correctthrow | 
+---------+-----+------------+----------+---------+----------+--------+--------------+ 
|  1 | 1 | 10/01/2012 |  1 | dan  | steve |  1 |   1 | 
|  2 | 1 | 10/01/2012 |  2 | steve | alice |  1 |   1 | 
|  3 | 1 | 10/01/2012 |  3 | alice | matt  |  1 |   1 | 
|  4 | 1 | 10/01/2012 |  4 | matt | justin |  1 |   1 | 
|  5 | 1 | 10/01/2012 |  5 | justin | arif  |  1 |   1 | 
|  6 | 1 | 10/01/2012 |  6 | arif | pete  |  1 |   1 | 
|  7 | 1 | 10/01/2012 |  7 | pete | greg  |  0 |   1 | 
|  8 | 1 | 10/01/2012 |  8 | greg | alan  |  1 |   1 | 
|  9 | 1 | 10/01/2012 |  9 | alan | david |  1 |   1 | 
|  10 | 1 | 10/01/2012 |  10 | david | dan  |  1 |   1 | 
|  11 | 2 | 11/01/2012 |  1 | dan  | david |  1 |   1 | 
|  12 | 2 | 11/01/2012 |  2 | david | alice |  1 |   1 | 
|  13 | 2 | 11/01/2012 |  3 | alice | steve |  1 |   1 | 
|  14 | 2 | 11/01/2012 |  4 | steve | arif  |  1 |   1 | 
|  15 | 2 | 11/01/2012 |  5 | arif | pete  |  0 |   1 | 
|  16 | 2 | 11/01/2012 |  6 | pete | justin |  1 |   1 | 
|  17 | 2 | 11/01/2012 |  7 | justin | alan  |  1 |   1 | 
|  18 | 2 | 11/01/2012 |  8 | alan | dan  |  1 |   1 | 
|  19 | 2 | 11/01/2012 |  9 | dan  | greg  |  1 |   1 | 
+---------+-----+------------+----------+---------+----------+--------+--------------+ 

を私は今、このため、データの価値はかなりの数日を持っている、と私は自分の目的のためにその上にいくつかのクエリを実行するために始めている(私はしましたチームの他の人にはまだ言わない...結果に影響を与えたくない)。私は問題なしでいくつかをやったが、私は特定の結果を出そうとしている。

私が探しているのは、各人がボールを受け取る最後のチームメンバーであった回数です。さて、あなたがテーブル上で見ることができるように、欠席などのために、1日あたりの投球数は常に一定ではないので、私は投手によってレシーバーを選択するだけではありません。上記データの場合

、それが戻ってくる:

+--------+-------------------+ 
| person | LastReceiverTotal | 
+--------+-------------------+ 
| dan |     1 | 
| greg |     1 | 
+--------+-------------------+ 

私はこれまでのところ持っている:

SELECT MAX(thrownum) AS LastThrowNum, day FROM Throws GROUP BY day 

は今、これはいくつかの有用なデータを返します。私は毎日最高のスラムを手に入れます。私がする必要があるのは、この値の受信者を取得し、それから受信者によってグループ化されたカウントを取得して回答を得ることだけです。しかし、これは機能しません。なぜなら、結果セットは、集約関数を使用した上記の問合せのためであるとは思われないからです。

正直なところ、データを格納するテーブルを設計する方がはるかに良い方法があると思われますが、同様に、この情報をそのままテーブルで取得する方法もあります。私はそれがどのように機能するのか理解できません。これがどうやって行なわれるのか誰にも分かりますか?

+3

真剣に:いくつかの作業を行ってください! ;-) –

+1

@JonEgertonこれは、会社が現時点で持っているかもしれないどんな小規模な仕事よりもはるかに重要です... *ブラウザウィンドウを最小化します* – Hecksa

+0

@Hecksa:これはMySQLですか? –

答えて

2

あなたが持っているクエリは、毎日最大のスラムを与えます。

これで、あなたはあなたのテーブルと内部結合を行い、レシーバーと彼がうまくいく回数を取得します。

select t.receiver as person, count(t.day) as LastReceiverTotal from Throws t 
inner join (SELECT MAX(thrownum) AS LastThrowNum, day FROM Throws GROUP BY day) a on a.LastThrowNum = t.thrownum and a.day = t.day 
group by t.receiver 
+0

閉じる...非常に近い。私はそれがすべての合理的なデータベースでうまくいくと思いますが、私はアクセスを使用しているので、クエリを実行すると、a.thrownのパラメータ値を求められます。それは正しく実行されているように見えますが、手動で入力したパラメータと最後のthrownumが等しい日だけです。それが起こると、私は少し努力するだけでそれに対処できますが、私は開発者ですから、手作業では受け入れられません。P私はSQLアクセスに関する情報を見つけることができるかどうかを見て回ります。昼食は、その間にあなたはこの事件のために見ることができる何らかの理由がありますか? – Hecksa

+0

はい、うまくいきます。それはa.LastThrowNumではなく、a.thrownum :) –

+1

ugh、失望私は自分自身の1つを選んでいない。完璧に動作します、ありがとうございます。 – Hecksa