我有一个数据库表,其中包含一个代表初始订阅日期的列。 我想要一个查询来获取按月和年分组的两个特定日期之间存在的记录数。 愿任何人帮助我。 这是这种表格的一个例子。
CREATE TABLE objects(
id int primary key,
subscription_date date,
)
我希望例如计算从2011年12月12日至2013年12月12日期间每月存在的对象 知道之前计算的对象必须在下个月再次计算,因为它们仍然存在,并且新日期中订阅的新对象将被累加。
答案 0 :(得分:1)
月份你可以尝试这样: -
SELECT COUNT(val)
FROM objects
GROUP BY MONTH(subscription_date);
一年你可以尝试这样: -
SELECT COUNT(val)
FROM objects
GROUP BY YEAR(subscription_date);
希望这可以帮到你。
答案 1 :(得分:1)
一种方法是创建日期列表,并使用相关子查询或连接/聚合进行计算。假设您每月至少有一个订阅,这里有一种方法:
select ym.yr, ym.mon,
(select count(*)
from objects o
where year(o.date) = ym.yr and month(o.date) = ym.mon
) as cnt
from (select distinct year(date) as yr, month(date) as mon
from objects
where date between '2011-12-12' and '2013-12-12'
) ym;