如何在单个select查询中获取用户今天和本月的活动计数

pw136qt2  于 2021-08-01  发布在  Java
关注(0)|答案(3)|浏览(241)

我的table上有:

Activity : Date
---------------
doSomething1 : June 1, 2020
doSomething2 : June 14, 2020

我希望能够进行查询,以便得到以下结果(假设今天是2020年6月1日):

Today : ThisMonth
1 : 2

我看了groupby,但我不知道如何在没有大量额外代码的情况下做到这一点,我认为很可能有一个更简单的解决方案,我缺少了。只返回一行两个结果的东西。这可能吗?如果可能,怎么可能?

zxlwwiss

zxlwwiss1#

您可以编写子查询来获取单行数据,

Select today , month 
from
(
( query to get today's count ) as today,
( query to get month's count ) as month
) t;

是的,你可以按日期分组来计算今天的月数。希望这能给你一些继续下去的感觉。

b91juud3

b91juud32#

这就是你想要的吗?

select array_agg(activity) filter (where date = current_date) as today,
       array_agg(activity) filter (where date <> current_date) as rest_of_month
from t
where date_trunc('month', date) = current_date;

它使用数组,因此可以处理任意一个类别中的多个活动。

k0pti3hp

k0pti3hp3#

假设您希望基于特定日期进行查询-

select count(case when d.date = :p_query_date then 0 end) day_count
      ,count(0) month_count
  from d -- your table name
 where d.date between date_trunc('month', :p_query_date) 
                  and date_trunc('month', :p_query_date + interval '1 month') - interval '1 day'

上面的查询假设您在d.date列上定义了索引。如果您在date\u trunc('month',date'上定义了索引,则查询条件可以简化为:
date\u trunc('month',d.date)=日期\u trunc('month',:p\u查询\u日期)

相关问题