如何获取今天和本月的记录数作为单个表?

时间:2019-05-02 09:55:03

标签: sql oracle

查询今天的记录:

update table set col= (1-1)* -1; // return 0;

查询当月记录:

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

4 个答案:

答案 0 :(得分:0)

添加第一个选择作为其他选择列:

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);

答案 1 :(得分:0)

您表中的'Sysdate'是build.gradle列吗?如果是这样:

date

答案 2 :(得分:0)

有条件聚合:

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;

答案 3 :(得分:0)

通过总结相关天数来使用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;