データをグループ分けするSQLを組みたいのですが
メンバーを、各人の点数からグループ分けしたいと
考えています。
グループ分けの基準は、たとえば50点という尺度があり、
その尺度以上離れていたら別のグループとするというものです。
また、各メンバーの点数は最大と最小が登録されています。
現在は、VBでプログラムを作って対応しましたが、
最近、LAG/LEAD分析関数の存在を知ったので、それをうまく使えば、
SQLだけで対応できるのではないかと思えます。
SQLだけで対応できると、そのVIEWを作ってしまえば、ユーザーに
簡単に引き渡せるので管理が楽になります。
うまいSQLがあれば教えてください。
具体的な処理内容は以下の通りです。
例えば、TABLE1のようなデータで、グループ分けをすると
ID=1と3の差が50点以内、3と2の差も50点以内なので、
その3名で1グループできます。
ID=4と5は、他と50点以上離れているので、それぞれ一人で
1グループになります。
ID= 6,7 は、差が50点以内なので、2名で1グループとなります。
結果として、TABLE2のような結果になります。
TABLE 1
ID MIN_SCORE MAX_SCORE
1 100 110
2 190 200
3 120 150
4 300 330
5 400 420
6 670 700
7 600 630
TABLE 2
CLASS MIN_SCORE MAX_SCORE N
1 100 200 3
2 300 330 1
3 400 420 1
4 600 700 2
そこに、TABLE1'のようなデータが加わると
ID=4と8は差が50点以内で、7と8も差が50点以内なので、
そこらが全て同じグループになり
TABLE 2' の結果となります。
TABLE 1'
8 380 550
TABLE 2'
CLASS MIN_SCORE MAX_SCORE N
1 100 200 3
2 300 700 5
以上、よろしくお願いします
補足
はい、すでにわかっているということでお願いします。