怎样用1条sql查询出3个时间的数据

一张表table 拥有主键id,姓名name,时间字段date,成绩achievement;怎样使用一条sql语句查询出本月的,上月的以及去年本月3个时间每个人的成绩
用的是mysql

with a as (),

b as (),

c as ()

select 姓名,a.成绩 今年本月,b.成绩 今年上月 ,c.成绩 去年本月 from a,b,c

本年本月
substr(sysdate,8,2) year
substr(sysdate,4,2) month

今年上月
substr(sysdate,8,2) year
substr(sysdate,4,2) month-1

去年本月
substr(sysdate,8,2) year-1
substr(sysdate,4,2) month

a,b,c查询姓名成绩 where date的年等于年,月等于月

全部SQL如下:
with a as (select 姓名 ,成绩 from table where date的年=substr(sysdate,8,2) and date的月=substr(sysdate,4,2)),

b as (select 姓名 ,成绩 from table where date的年=substr(sysdate,8,2) and date的月=substr(sysdate,4,2)-1),

c as (select 姓名 ,成绩 from table where date的年=substr(sysdate,8,2)-1 and date的月=substr(sysdate,4,2))

select 姓名,a.成绩 今年本月,b.成绩 今年上月 ,c.成绩 去年本月 from a,b,c

select name,achievement from 表名 where date  in(本月起始时间段,本月终止时间段) and date in(上月起始时间段,上月终止时间段) and date in(去年本月起始时间段,去年本月终止时间段);
//将其中的表名和时间替换为真实的表名与要查询时间段范围即可。注意,时间数据值要加上单引号, 

若有帮助,还望采纳!!!谢谢。。。

对于楼下那位说“查不到数据的”的,你还是好好回去看下SQL吧。
首先来说,pg上面试没有问题的,myslq上面没去验证。

select date ,name,achievement from table where DATE_FORMAT( [date], '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' ) (本月)
select date ,name,achievement from table where PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( [date], '%Y%m' ) ) =1(上月)
select date ,name,achievement from table where year([date])=year(date_sub(now(),interval 1 year))(去年本月)

你试试看

where
MONTH(a.time) = MONTH(now()) or

MONTH(a.time) = MONTH(DATE_ADD(now(),INTERVAL -1 MONTH)) or
MONTH(a.time) = MONTH(DATE_ADD(now(),INTERVAL -1 YEAR));
简单的逻辑取出时间的月份判断月份是否相等

图片说明

SELECT * FROM table1 WHERE (PERIOD_DIFF(DATE_FORMAT( CURDATE( ) , '%Y%m' ),DATE_FORMAT( date, '%Y%m' ))=1) or (DATE_FORMAT( date, '%Y%m' )=DATE_FORMAT( CURDATE( ) , '%Y%m' )) or (year(date) = year(date_sub(now(),interval 1 year)));

你只需要把table1改成你的表名即可,