Как получить сегодня и в этом месяце количество записей в одной таблице? - PullRequest
0 голосов
/ 02 мая 2019

Запрос на сегодняшние записи:

SELECT FIELD1, COUNT(1) AS "TODAY_COUNT" FROM TABLE1 
WHERE DATEFIELD >= TRUNC(SYSDATE) 
GROUP BY FIELD1;

Запрос записей текущего месяца:

SELECT FIELD1, COUNT(1) AS "THIS_MONTH_COUNT" FROM TABLE1 WHERE 
EXTRACT(YEAR FROM DATEFIELD) = EXTRACT(YEAR FROM SYSDATE) AND
EXTRACT(MONTH FROM DATEFIELD) = EXTRACT(MONTH FROM SYSDATE)
GROUP BY FIELD1;

Необходимо отобразить два значения в одном выражении SELECT.

Как я могу добиться этого эффективно?

Ожидаемый результат:

----------------------------------------
|FIELD1|today_count | This_month_count |
----------------------------------------
| NAME1|         10 |              3442|
| NAME2|         15 |              4342|
----------------------------------------

Ответы [ 4 ]

0 голосов
/ 02 мая 2019

Использование decode путем суммирования связанных дней может быть коротким и чистым подходом:

select field1,
       sum(decode(to_char(datefield,'yyyymm'),to_char(sysdate,'yyyymm'),1,0)) as "This month's count",
       sum(decode(sign(trunc(datefield)-trunc(sysdate)+1),1,1,0)) as "Today's count"
  from table1 t
 group by field1;
0 голосов
/ 02 мая 2019

Является ли 'Sysdate' в вашей таблице столбцом date? Если так:

SELECT  
    COUNT(
        CASE            
           WHEN DATEFIELD = cast(getdate() as Date)             
           THEN 1           
           ELSE NULL        
    END) AS TodayCount,     
    COUNT(      
         CASE           
           WHEN DATEFIELD BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) AND GETDATE()          
           THEN 1           
           ELSE NULL        
    END) AS MonthCount
FROM Table
0 голосов
/ 02 мая 2019

С условной агрегацией:

SELECT 
  FIELD1,
  SUM(CASE WHEN DATEFIELD >= TRUNC(SYSDATE) THEN 1 ELSE 0 END) today_count,
  SUM(CASE WHEN 
          EXTRACT(YEAR FROM DATEFIELD) = EXTRACT(YEAR FROM SYSDATE) 
          AND 
          EXTRACT(MONTH FROM DATEFIELD) = EXTRACT(MONTH FROM SYSDATE)) 
        THEN 1
        ELSE 0
      END) This_month_count  
FROM TABLE1  
GROUP BY FIELD1;
0 голосов
/ 02 мая 2019

Добавить первый выбор в качестве дополнительного столбца выбора:

SELECT COUNT(1) AS "THIS_MONTH_COUNT" ,
  (SELECT COUNT(1) FROM TABLE1 WHERE DATEFIELD >= TRUNC(SYSDATE)) AS "TODAY_COUNT"
FROM TABLE1 WHERE 
EXTRACT(YEAR FROM DATEFIELD) = EXTRACT(YEAR FROM SYSDATE) AND
EXTRACT(MONTH FROM DATEFIELD) = EXTRACT(MONTH FROM SYSDATE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...