Aşağıdaki komutlarla oluşturulabilir iki tablo (kümelenmemiş bir dizin ile birlikte) var:
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);
Teknik olarak tablolarım biraz farklı olsa da ve birkaç masaya katılıyorum, bu durumum için uygun bir proxy.
- Başka birinin
GroupKeys
alt kümesi olmayan her şeyi seçmek istiyorumGroupKey
. - Belirli bir süper
GroupScore
küme için, tüm alt kümelerinin (kendisi dahil) maksimumunu almak istiyorum . - A'nın bir diğeriyle
GroupKey
aynı kesinliği içermesi durumunda , bunlardan sadece biri yakalanır (hangisinin önemli olduğu önemli değildir).RecordKeys
GroupKey(s)
GroupKeys
- Bir başkasıyla
GroupKey
aynı kesinliğe sahip olanlar da aynı olacaktır .RecordKeys
GroupKey(s)
GroupScore
- İlişkili olmayanlar
GroupKeys
da aynı puana sahip olabilir.
Aşağıdakileri sorduğumu gösteren bir örnek:
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
Çıktı aşağıdaki gibi istiyorum:
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTable
yaklaşık 75M sıraya RecordTable
sahiptir ve yaklaşık 115M sıraya sahiptir; ancak, birleşimler ve WHERE
yüklemden sonra, belirli bir günde yaklaşık 20 bin satır olma eğilimindedir.
Bu sorunun önemsiz olup olmadığı için özür dilerim, ama nedense gerçekten bununla mücadele ediyorum.