Для простоты предположим, что у меня есть две таблицы:
billing
со следующими полями bill_id
(первичный, уникальный ключ, int), person_id
, bill_date
и billing_detail
, содержащие bill_id
и service_type
.
Прежде всего, я хотел бы получить список клиентов (person_id
), которым выставлен счет за определенный спектр услуг в данный период, поэтому просто
SELECT billing.person_id, billing.bill_date
FROM billing
INNER JOIN billing_detail ON billing.bill_id = billing_detail.bill_id
WHERE billing_detail.service_type IN (list of services)
AND billing.bill_date between some_date and another_date
Что я хотел бы сделать сейчас, так это показать, сколько раз данному клиенту был выставлен счет за один и тот же набор услуг ДО данной даты.
Скажем, таблица billing
содержит:
1 | 1 | 1/1/2020
2 | 1 | 1/2/2020
3 | 1 | 1/3/2020
4 | 1 | 1/4/2020
4 | 1 | 2/4/2020
И таблица billing_detail
содержит:
1 | A
2 | B
3 | A
4 | B
5 | A
Так что, если бы я должен был запустить отчет для клиента 1 за период с января по апрель для типа обслуживания A, ожидаемый результат будет
1 | 1/1/2020 | 0 (no A type service prior to this date)
1 | 1/3/2020 | 1 (One A type service prior to this date)
1 | 2/4/2020 | 2 (Two A type services prior ot this date).
Это, вероятно, предполагает какое-то самостоятельное соединение за обоими столами, но мой уставший птичий мозг не может найти ответ в данный момент. Любая помощь будет оценена.