У меня есть таблица отзывов и таблица транзакций. Я хочу узнать количество транзакций после того, как клиент отправил отзыв.
Таблица отзывов выглядит примерно так:
+-------------+--------------+-------------+----------------+
| customer_id | review_score | review_date | transaction_id |
+-------------+--------------+-------------+----------------+
| 123 | 4 | 2019-01-01 | 894 |
+-------------+--------------+-------------+----------------+
| 123 | 9 | 2019-05-23 | 897 |
+-------------+--------------+-------------+----------------+
| etc | etc | etc | etc |
+-------------+--------------+-------------+----------------+
Таблица транзакций выглядит примерно так:
+-------------+------------------+----------------+
| customer_id | transaction_date | transaction_id |
+-------------+------------------+----------------+
| 123 | 2019-10-01 | 901 |
+-------------+------------------+----------------+
| 123 | 2019-12-04 | 903 |
+-------------+------------------+----------------+
| etc | etc | etc |
+-------------+------------------+----------------+
Я хотел бы видеть следующее:
+-------------+--------------+-------------+----------------+-------------+------------------+----------------+
| customer_id | review_score | review_date | transaction_id | customer_id | transaction_date | transaction_id |
+-------------+--------------+-------------+----------------+-------------+------------------+----------------+
| 123 | 4 | 2019-01-01 | 894 | null | null | null |
+-------------+--------------+-------------+----------------+-------------+------------------+----------------+
| 123 | 9 | 2019-05-23 | 897 | 123 | 2019-10-01 | 901 |
+-------------+--------------+-------------+----------------+-------------+------------------+----------------+
| 123 | 9 | 2019-05-23 | 897 | 123 | 2019-12-04 | 903 |
+-------------+--------------+-------------+----------------+-------------+------------------+----------------+
| etc | etc | etc | etc | etc | etc | etc |
+-------------+--------------+-------------+----------------+-------------+------------------+----------------+
Транзакции совершаются после последнего представленного отзыва. Будут случаи, когда клиент совершает несколько покупок и отправляет отзывы о них. Я хотел бы присоединиться к транзакции после отправки отзыва и до отправки следующего отзыва.
Мой запрос:
with review_cte as (
select transaction_id
, customer_id
, review_date
, lead(review_date, 1) over (partition by customer_id order by review_date) as review_date_lead
, review_score
from review
)
select rev.*
, b.transaction_id
, b.customer_id
, b.transaction_date
from review_cte as rev
join booking b
on b.unique_customer_id = rev.customer_id
and b.transaction_date > rev.review_date
and b.transaction_date < rev.review_date_lead
and b.booking_id <> rev.booking_id
order by rev.customer_id, rev.review_date
, b.customer_id, b.transaction_date
;
Проблема с моим запросом заключается в том, что он не будет возвращать все строки илиприсоединяться к идентификатору транзакции просмотра более одного раза, поскольку он удовлетворяет условию, когда дата транзакции> дата обзора. Я говорю, зависит, потому что я экспериментировал, выполняя некоторые условия соединения и тому подобное