返回今年2月的记录(如果有),否则返回去年2月的记录



我是SQL新手。我想要计算今年在表中创建的2月份(或所有月份)的记录数,如果没有记录尚未为该月创建,我想计算该月的去年计数。结果应该随着年份的变化而变化,当我们到达4月1日时,结果应该显示0条记录。

我试着用Case,它"奏效了"。当今年没有新记录时,它将显示去年当月创建的记录数,但例如一月份,我们创建了记录,并且总和成为今年一月份的记录加上去年一月份的记录的总和。我以为当第一个时候应该退出的情况是真的。有什么建议吗?

我的代码:

SELECT 
COUNT(`user_activity`.`creation_date`) AS `ticket_count`
FROM
`user_activity`
WHERE
CASE

WHEN (Year(creation_date)=Year(curdate()) and MonthName(curdate())='January' is not null) >0
THEN ((MONTHNAME(`user_activity`.`creation_date`) = 'January') AND  Year(`user_activity`.`creation_date`)=year(curdate())))
when(Year(creation_date)=Year(curdate())-1 and MonthName(curdate())='January' is not null) >0
then
((MONTHNAME(`user_activity`.`creation_date`) = 'January') AND (Year(`user_activity`.`creation_date`)=year(curdate())-1))
END;

获取查询的一种简单方法是运行两个查询,分别返回各自年份/月份的一行,并在它们之间应用合并,仅获取HAS记录的第一个统计值。如果今年没有,就从去年开始计数。

select
case when coalesce( thisYear.Recs, 0 ) = 0
then lastYear.Recs
else thisYear.Recs ) end Ticket_Count
from
( select count(*) Recs
from User_Activity
where creation_date >= '2022-02-01'
AND creation_date < '2022-03-01' ) lastYear
LEFT JOIN
( select count(*) Recs
from User_Activity
where creation_date >= '2023-02-01'
AND creation_date < '2023-03-01' ) thisYear
-- join always for principle, include joining "ON" clause
-- since both queries above always return 1 row, 1=1 works
on 1=1

最新更新