一张表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改成你的表名即可,