У меня есть таблица с информацией о предупреждениях для заказов на замену. (Br) (br)
Мне нужно подтвердить для каждого оповещения, что для каждого идентификатора заказа в идентификаторе оповещения:
Имена покупателя совпадают
Оплаченная дата отличается для каждого оповещения.
Alert_ID | Order_ID | Buyer_ID | Item | Quantity | Paid_date
01 | 001A | Adam | Apple | 2 | 01/01/2019
01 | 001A | Adam | Orange| 3 | 01/01/2019
01 | 001B | Adam | Apple | 4 | 01/03/2019
01 | 001B | Adam | Orange| 3 | 01/03/2019
01 | 001C | Adam | Apple | 3 | 01/07/2019
01 | 001C | Adam | Orange| 3 | 01/07/2019
02 | 002A | Pam | Banana| 2 | 01/21/2019
02 | 002A | Pam | Grapes| 1 | 01/21/2019
02 | 002B | Pam | Banana| 2 | 01/30/2019
02 | 001B | Pam | Grapes| 4 | 01/30/2019
04 | 004A | Dave | Apple | 2 | 01/01/2019
04 | 004B | Mary | Apple | 3 | 01/01/2019
Первоначально это было отношение 1: 1 заменяющих требований к первоначальным требованиям.
Я разделил таблицу на две части по alert_id с порядком замены в одном подзапросе и исходным заказом В другом, тогда я мог бы сравнить все поля, которые мне нужны, между оповещениями и заказами.
select
*
from
(
with repl as(
select
Alert_ID, Order_ID, Buyer_ID, Paid_date
ROW_NUMBER () over(partition by alert_id order by alert_id, Order_id) AS RN
from <MY ALERT TABLE>
)
SELECT * FROM repl WHERE RN = 1
) A
LEFT JOIN
(
with repl as(
select
Alert_ID, Order_ID, Buyer_ID, Paid_date
ROW_NUMBER () over(partition by alert_id order by alert_id, Order_id) AS RN
from <MY ALERT TABLE>
)
SELECT R1.*
FROM repl R1
LEFT OUTER JOIN repl R2
ON R1.ALERT_ID = R2.ALERT_ID AND R1.RN < R2.RN
WHERE R2.RN IS NULL
) B
ON A.ALERT_ID = B.ALERT_ID
WHERE
a.order_id=b.order_id
and a.buyer_id <> b.buyer_id
and a.paid_date > b.paid_date
Это работало нормально для 1: 1, но с 1: n я проиграл все ордера, которые появляются между первым и последним номером строки.
Ожидаемый результат:
Возврат исключений из правил
Alert_ID | Order_ID | Buyer_ID | Item | Quantity | Paid_date
04 | 004A | Dave | Apple | 2 | 01/01/2019
04 | 004B | Mary | Apple | 3 | 01/01/2019