次のコマンドで作成できる2つのテーブル(非クラスター化インデックスと共に)があります。
CREATE TABLE GroupTable
(
GroupKey int NOT NULL PRIMARY KEY,
RecordCount int NOT NULL,
GroupScore float NOT NULL
);
CREATE TABLE RecordTable
(
RecordKey varchar(10) NOT NULL,
GroupKey int NOT NULL,
PRIMARY KEY(RecordKey, GroupKey)
);
CREATE UNIQUE INDEX ixGroupRecord ON RecordTable(GroupKey, RecordKey);
技術的にはテーブルが少し異なり、他のいくつかのテーブルに参加していますが、これは私の状況に適したプロキシです。
GroupKeys
別のサブセットではないものをすべて選択したいGroupKey
。- 特定のスーパーセットについて、
GroupScore
すべてのサブセット(それ自体を含む)の最大値を取得したいと思います。 - a
GroupKey
にRecordKeys
別のとまったく同じものが含まれている場合GroupKey(s)
、そのうちの1つだけGroupKeys
が取得されます(どちらを使用してもかまいません)。 - 別のものと
GroupKey
まったく同じであるものはすべて同じになります。RecordKeys
GroupKey(s)
GroupScore
- 非関連
GroupKeys
も同じスコアを持つことができます。
以下は私が求めていることを説明するための例です:
GroupTable RecordTable
GroupKey RecordCount GroupScore RecordKey GroupKey
------------------------------------ ---------------------
1 3 6.2 A 1
29 2 9.8 A 29
95 3 6.2 A 95
192 4 7.1 A 192
B 1
B 29
B 95
B 192
C 1
C 95
D 192
E 192
出力を次のようにしたいと思います。
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTable
75M行の周りにあり、RecordTable
周り115M行を持っています。ただし、結合とWHERE
述語の後、特定の日に約2万行になる傾向があります。
この質問が些細なものである場合はお詫び申し上げますが、何らかの理由で私は本当にそれに苦労しています。