У меня есть ситуации, как показано ниже:Считайте транзакции в течение месяца только один раз
У меня есть две таблицы базы данных. Первая таблица, которую я буду называть TB1, содержит все зарплаты, которые клиент кредитует & также дату совершения транзакции. Вторая таблица, которую я буду называть TB2, содержит все продукты, которые клиент имеет в банке. Моя цель - найти количество зарплат, которое клиент получил до того дня, когда у него появился продукт (ПЕРЕЗАГРУЗКА в моем случае) в нашем банке. До сих пор все работает нормально, и я сделал запрос на извлечение необходимых данных. Единственная проблема заключается в том, что мне нужно улучшить запрос. Таким образом, если у определенного клиента больше 1 зарплаты (например, каждые 15 дней) в течение того же месяца того же года, зарплата подсчитывается только один раз. Как я могу это сделать ПОЖАЛУЙСТА?
Этот запрос, как показано ниже:
SELECT TB1.customer_id, COUNT(TB1.customer_id)
FROM table_1 TB1
JOIN
(SELECT TB2.CUSTOMER_ID, TB2.OD_START_DATE
FROM table_2 TB2
JOIN table_2 TB2_MAX
ON TB2.CUSTOMER_ID = TB2_MAX.CUSTOMER_ID
HAVING TB2.od_start_date = MAX(TB2.od_start_date)
GROUP BY TB2.customer_id, TB2.od_start_date
) TB2
ON TB1.CUSTOMER_ID = TB2.CUSTOMER_ID
WHERE TB1.DATE_FROM < TB2.OD_START_DATE
GROUP BY TB1.CUSTOMER_ID
PS: DATE_FROM поле содержит дату, когда сделка сделана, в то время как OD_START_DATE поле содержит дату, когда открыт последний продукт.
Спасибо Ноэль, я не делал точно, что вы сказали, но COUNT (DISTINCT TO_CHAR (TB1.DATE_FROM, «ГГГГММ»)) спас мою жизнь :) СПАСИБО ТАК МНОГО – Marin
Пожалуйста, вы можете показать мне, как это сделать? Я голосовал за решение. – Marin
Просто нажмите на отметку рядом с ответом. http://stackoverflow.com/help/someone-answers – Noel