私は統計的なデータを持つテーブルを持っています。時間範囲内でレコードを1回だけカウントするにはどうすればよいですか?
バージョンごとにグループ化されたレコードを数えようとしていますが、レコードに別の基準(ref)があり、1回のみ(1回の参照で)カウントする必要があるという問題があります。問題を説明するため
統計のサンプルデータ:
id stat_date ref version
-------------------------
1 2012-01-25 1 A
2 2012-01-25 2 B
3 2012-01-25 3 A
4 2012-01-26 8 B
5 2012-01-26 2 B
6 2012-01-26 3 B <-- version has been updated for ref=3
単純なカウントが
SELECT COUNT(*),version FROM stat GROUP BY version
1,A
5,B
ここでの問題は、= 3(ID = 6)でなければなりませんREFとその唯一の最後のレコードであるを返しますカウントされ、(id = 3)は無視されなければならない。 質問から、行(id = 3)をクエリからどのようにフィルタリングできますか?私は、サブクエリ
SELECT COUNT(*),version FROM stats
WHERE stat_date BETWEEN "2012-01-25" AND "2012-01-26"
AND id = (SELECT MAX(id) FROM stats WHERE <condition>)
GROUP BY 2
に条件として挿入すべきかを把握することはできません
期待される結果は次のようになります。
1,A (since id=3 is ignored)
3,B (since the first id=2 is ignored and only id=5 is taken into account)
@ Jaitsuは1列目にcount(*)を、2列目にグループ化しているためです。 – Bohemian
@Jaitsu列リスト(バージョン)の2番目の引数を意味します。 – stacker
@stacker、毎日新しいことを学ぶ! – JamesHalsall