在给定开始和结束日期SQL的情况下,如何按月份查找记录计数



我有一个表:

1 180101    180228
2 180301    180831
3 180901    999999
4 180801    999999
5 180401    181031
6 181101    999999
7 180101    999999

列为:userid、开始日期、结束日期。

日期为文本格式,YYYMDD和999999表示没有结束日期。

如何获得每个月的客户数量?例如,3月将包括3月或之前开始,3月或之后结束的所有客户。但不包括从1月份开始,到2月份结束的客户。

我试着这样做,然后写出所有的逻辑:

SELECT SUBSTRING(start_date, 3, 2) AS start, SUBSTRING(end_date, 3, 2) AS end, count(*)
FROM data
GROUP BY start, end
ORDER BY start

我只是想知道是否有更好的方法?

如果你每个月都有开始,你可以使用相关的子查询来获得该月第一天的计数:

select ym.yymm,
(select count(*)
from t
where t.startdate <= ym.yymm and
t.enddate >= ym.yymm
) as month_count
from (select distinct left(startdate, 4) as yymm
from t
) ym;

某些数据库可能将left()拼写为substr()

最新更新