У меня есть такая таблица в базе данных Oracle 11g
TABLE REC
REC_ID NUMBER
CARD_ID NUMBER
REC_STATUS NUMBER
REC_DATE TIMESTAMP
Я хочу знать, сколько карт было пополнено за определенный период, но я хочу, чтобы эта информация была сгруппирована по дате.Если card_id уже был подсчитан в одну дату, он не должен учитываться в другую следующую (отдельную).
Вот некоторые тестовые данные
with
REC ( REC_ID, CARD_ID, REC_STATUS, REC_DATE ) as (
select '1', '100', '1', SYSTIMESTAMP - 5 from dual union all
select '2', '100', '1', SYSTIMESTAMP - 5 from dual union all
select '3', '200', '1', SYSTIMESTAMP - 5 from dual union all
select '4', '100', '1', SYSTIMESTAMP - 4 from dual union all
select '5', '300', '1', SYSTIMESTAMP - 4 from dual union all
select '6', '200', '1', SYSTIMESTAMP - 4 from dual union all
select '7', '100', '1', SYSTIMESTAMP - 3 from dual union all
select '8', '400', '1', SYSTIMESTAMP - 3 from dual union all
select '9', '400', '1', SYSTIMESTAMP - 3 from dual union all
select '10', '400', '1', SYSTIMESTAMP - 2 from dual union all
select '11', '300', '1', SYSTIMESTAMP - 2 from dual union all
select '12', '100', '1', SYSTIMESTAMP - 2 from dual union all
select '13', '400', '1', SYSTIMESTAMP - 2 from dual
)
-- end of test data
Когда я выполняю запрос, подобный этому,у меня есть общее количество 4, что является правильным.
SELECT
COUNT(DISTINCT CARD_ID) COUNT
FROM REC
WHERE REC_STATUS = 1
Результат
|COUNT|
| 4 |
Но, когда я пытаюсь таким образом, я имею общее количество 10. Это потому, чтокогда я использую «сгруппировать» в дату и использую «отличный» в идентификаторе, различие будет работать только для сгруппированной даты, а не для всего периода.
SELECT
TRUNC(REC_DATE) DAT,
COUNT(DISTINCT CARD_ID) COUNT
FROM REC
WHERE REC_STATUS = 1
GROUP BY TRUNC(REC_DATE)
Результат
DAT | COUNT
14/06/19 | 2
13/06/19 | 3
15/06/19 | 3
12/06/19 | 2
Что я могу сделать, чтобы применить отличительное к общему периоду и при этом сохранить группировку по дате?