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

e3bfsja2  于 2023-01-08  发布在  Mysql
关注(0)|答案(1)|浏览(147)

我对SQL很陌生。我想计算今年在表中创建的二月(或所有月份)的记录数,如果还没有为我想计算去年的月份创建记录数的月份创建记录。结果应该会随着年份而变化,当我们到达4月1日时,结果应该显示0条记录。
我尝试使用一个案例,它"工作"时,没有新的记录为今年,它会显示去年创建的记录数量为月份,但例如一月,我们有记录创建,和总和成为今年的记录在一月加上记录从去年一月的总和。我认为案例时,应该退出时,第一个什么时候是真的。任何建议?
我的代码:

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

mhd8tkvw1#

获取查询的一个简单方法是运行两个查询,分别为年/月返回一行,然后在它们之间应用合并,只获取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

相关问题