Отчет по лог-таблице

Roobl
Дата: 03.08.2005 13:59:38
Здравствуйте Гуру и НеОченьГуру!

Нужен хелп. Есть таблица-лог типа:


QUESTION USER_ID ENTRY_DATE FLAG1 FLAG2
1 1 20/12/04 0 1
1 1 25/12/04 1 1
1 3 26/12/04 1 1
1 2 10/02/05 0 1
1 3 15/02/05 0 0

2 1 21/12/04 1 1
2 1 01/02/05 1 1
2 2 11/10/05 1 0
2 2 21/12/05 1 1

Необходимо получить отчет по одному вопросу (QUESTION) помесячно:

-------------------------------------------
|Q#: 1 |Всего |UNIQUE USER|FLAG1 |FLAG2 |
-------------------------------------------
|12/04 |3 |2 |2 |3 |
|01/05 |0 |0 |0 |0 |
|02/05 |2 |2 |0 |1 |
-------------------------------------------
|Всего |5 |3 |2 |4 |
-------------------------------------------

Делаю это выборками:


SELECT
count(*)
FROM MY_TABLE
WHERE ENTRY_DATE >= TO_DATE('12/2004','mm/yyyy')
AND ENTRY_DATE < TO_DATE('01/2005','mm/yyyy');

SELECT
count(DISTINCT USER_ID)
FROM MY_TABLE
WHERE ENTRY_DATE >= TO_DATE('12/2004','mm/yyyy')
AND ENTRY_DATE < TO_DATE('01/2005','mm/yyyy');

SELECT
count(*)
FROM MY_TABLE
WHERE ENTRY_DATE >= TO_DATE('12/2004','mm/yyyy')
AND ENTRY_DATE < TO_DATE('01/2005','mm/yyyy')
AND FALG1 = 1;

SELECT
count(*)
FROM MY_TABLE
WHERE ENTRY_DATE >= TO_DATE('12/2004','mm/yyyy')
AND ENTRY_DATE < TO_DATE('01/2005','mm/yyyy')
AND FALG2 = 1;

И так для каждого месяца. А потом такая же группа запросов для всего периода.
При количестве записей на моей тестовой таблице около 2.5 млн становится скучно.
Реальная таблица доходит до 10 млн записей.

Можно ли как-то эти запросы соптимизировать? Например уменьшить их
количество для одного периода (строки отчета) ИЛИ уменьшить их количество
для одной категории (столбцы отчета) ИЛИ всё сделать одним запросом?
Больно они (запросы) похожы между собой - а в голову ниче не лезет по их
склеиванию...

И конечно, же: главная задача - уменьшить время общей выборки.

Если я чего-то не так написал в условии задачи - спрашивайте, уточню.

Спасибо.
Terrorist
Дата: 03.08.2005 14:03:52
SELECT count(*),trunc(entry_date,'MM') FROM MY_TABLE WHERE ENTRY_DATE >= TO_DATE('01/2004','mm/yyyy')AND ENTRY_DATE < TO_DATE('01/2005','mm/yyyy')
Group by trunc(entry_date,'MM') ;
Спасёт ?
Roobl
Дата: 03.08.2005 15:02:43
Terrorist
SELECT count(*),trunc(entry_date,'MM') FROM MY_TABLE WHERE ENTRY_DATE >= TO_DATE('01/2004','mm/yyyy')AND ENTRY_DATE < TO_DATE('01/2005','mm/yyyy')
Group by trunc(entry_date,'MM') ;
Спасёт ?


Спасибо. Только почему-то на даты в WHERE запрос не реагирует... А нужно...
Roobl
Дата: 03.08.2005 15:18:07
SORRY!!!
На дату в WHERE реагирует! оБшибся...