Я пытаюсь сократить цикл на SQL Server, и я немного тупик. Мне нужно объединить покупки и продажи по заданным критериям. Для этих критериев группа покупок может соответствовать группе продаж. Не каждая покупка может соответствовать каждой продаже (и наоборот), но одна покупка может сравниться с более чем одной продажей (и наоборот). Я могу легко получить временную таблицу всех возможных совпадений, но сложная часть соединяет одну покупку с одной продажей только с использованием только один раз.Избегание циклов в совпадающих записях
Хотя цикл в какой-то мере кажется неизбежным, я бы предпочел не использовать курсор из-за объема записей. Я хотел бы выбрать один набор критериев за один раз (например, захватить первую пару для каждого элемента). Я пытаюсь использовать временную таблицу #T возможных совпадений, сужать их до пар и повторять. По крайней мере, я пишу 100 раз вместо миллиона.
Вот фрагмент таблицы температуры #T:
MatchID BuyID SellID
1 91 59
2 91 60
3 97 59
4 97 60
Для выше, я могу держать либо MatchIDs 1 и 4 или 2 и 3. Я пытался использовать этот алгоритм, чтобы сузить:
- Удалить запись с большей MatchID но такой же BuyID
- Удалить запись с большей MatchID но такой же SellID
Если я это сделаю, шаг (1) удаляет записи 2 и 4, а шаг (2) удаляет запись 3. Я могу изменить порядок записей в SQL, так что пары имеют разные идентификаторы MatchID, но я связан тем, что я может работать в SQL Server. Я попытался упорядочить матчи по-разному, но ничто не дает мне что-то, к чему я могу применить алгоритм.
У кого-нибудь еще была такая проблема?
Что должно быть сопоставлено в этом случае: (1,2,3), (2,2,4), (3,3,5)? –
Является ли это столь же сложным, как данные действительно получают? Или возможно, что существует 5 'BuyID' строк для BuyID = 98 и только 3' BuyID' для BuyID = 99? Вы говорите, что они не будут соответствовать друг другу, так может ли быть так, что 'BuyID' из 98 также соответствует только значениям SellID' 59 и 60? В этом случае 59 и 60 уже использовались для значений BuyID 91 и 97, так что делать? –
Данные действительно усложняются, но я не хотел, чтобы этот вопрос был слишком запутанным. Считайте, что BuyID 91 можно сопоставить с SellID 59 или 60, и то же самое для BuyID 97. Однако я могу только соответствовать одному BuyID за раз, поэтому мне нужно выбрасывать совпадения, которые являются дубликатами, не делая слишком много проходит в петле. –