У меня есть следующие таблицы:
Order
----
ID (pk)
OrderItem
----
OrderID (fk -> Order.ID)
ItemID (fk -> Item.ID)
Quantity
Item
----
ID (pk)
Как я могу написать запрос, который может выбрать все Orders
, которые по крайней мере на 85% похожи на конкретный Order
?
Я рассмотрел статистику Jaccard Index, чтобы рассчитать сходство двух Orders
. (Взяв пересечение каждого набора из OrderItems
, деленное на объединение каждого набора из OrderItems
)
Однако я не могу придумать, как это сделать, не сохраняя вычисленный индекс Jaccard для каждой возможной комбинации двух Orders
. Есть ли другой способ?
Кроме того, есть ли способ включить разницу в Quantity
каждого согласованного OrderItem
?
Дополнительная информация:
Всего Orders
: ~ 79k
Всего OrderItems
: ~ 1.76m
Avg. OrderItems
за Order
: 21.5
Всего Items
: ~ 13k
Примечание
85% -ое сходство - это просто лучшее предположение о том, что действительно нужно клиенту, оно может измениться в будущем. Решение, которое работает для любого сходства, было бы предпочтительным.