2017-01-26 9 views
0

私は2つのフィールド(payrollとabsenceReason)を持つMSアクセスのテーブルを持っています。 1つのインスタンスに1つのレコードが存在します。各グループの最大数を取得します

私はSQLクエリーを作成して、各人に最も頻繁に欠席する理由を返そうとしています。私はこれを行う簡単な方法があると確信していますが、私はそれを取得するように見えることはできません。私は以下のクエリを書こうとしました:

SELECT payroll, reason, max(count) 
FROM 
(
SELECT payroll, reason, count(reason) as count 
FROM table1 
GROUP BY payroll, reason 
) 
GROUP BY payroll, reason 

しかし、これは各人ごとにすべての理由を返します。理由をGROUP BY句から削除すると、選択部分に理由が集約されていないため、機能しません。誰が私が間違っているのかを指摘できますか?

おかげ

答えて

1

一つの方法は、havingを使用しています。

SELECT payroll, reason, count(reason) as count 
FROM table1 as t1 
GROUP BY reason, payroll 
HAVING t1.reason = (SELECT TOP 1 tt1.reason 
        FROM table1 as tt1 
        WHERE tt1.payroll = t1.payroll 
        GROUP BY tt1.reason 
        ORDER BY COUNT(*) DESC, tt1.reason 
        ); 
+0

これは素晴らしい作品をありがとうございました!私はちょうど最初のエイリアスをt1に変更しなければならなかった – Leroy

+0

誰かが1つ以上のトップ理由(例えばそれぞれ1つ)を持っていれば、最新のものを返すように、これを調整する方法を知っていますか?表)?ありがとう – Leroy

+1

それは大丈夫です。わかった。私は、サブクエリのGROUP BY句にhavingDateを入れて、それを理由の代わりにORDER BY句に含めました。 – Leroy

関連する問題