mysql 统计今天,昨天,本周,上周,本月,近七天,近30天,上一月,本季度,上季度,本年,上年的数据

CREATE TABLE `demo` (
  `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  `money` int(11) NOT NULL,
  `cdate` date NOT NULL,
  `userName` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `demo` VALUES 
('1', '10', '2019-09-16', '张三'),
('2', '10', '2019-09-16', '张三'),
('3', '10', '2019-09-17', '张三'),
('4', '10', '2019-09-18', '张三'),
('5', '10', '2019-09-12', '张三'),
('6', '10', '2019-09-11', '张三'),
('7', '10', '2019-09-19', '张三'),
('8', '10', '2019-09-20', '张三'),
('9', '10', '2019-09-05', '张三'),
('10', '10', '2019-09-21', '张三'),
('11', '10', '2019-09-19', '李四'),
('12', '10', '2019-09-19', '李四'),
('13', '10', '2019-09-11', '李四'),
('14', '10', '0219-09-20', '李四'),
('15', '10', '2019-09-20', '张三'),
('16', '10', '2019-09-21', '张三'),
('17', '10', '2019-09-20', '李四'),
('18', '100', '2019-09-22', '张三'),
('19', '10', '2019-09-22', '李四');

今日

SELECT * FROM demo WHERE DATE_FORMAT(cdate,'%Y-%m-%d') = DATE_FORMAT(now(),'%Y-%m-%d')

select * from demo where to_days(cdate) = to_days(now());

昨天

select * from demo where to_days(DATE_FORMAT(now(),'%Y-%m-%d')) - to_days(cdate) <=1

本周

SELECT * FROM demo WHERE YEARWEEK(date_format(cdate,'%Y-%m-%d')) = YEARWEEK(now());

上周

SELECT * FROM demo WHERE YEARWEEK(date_format(cdate,'%Y-%m-%d')) = YEARWEEK(now())-1;

近七天

select * from demo where date_sub(curdate(), interval 7 day) <= DATE(cdate)

近三十天

select * from demo where date_sub(curdate(), interval 30 day) <= date(cdate)

本月

select * from demo where date_format(cdate, '%y%m' ) = date_format(SYSDATE(), '%y%m' )

上月

select * from demo where period_diff(date_format(SYSDATE(),'%y%m'),date_format(cdate,'%y%m')) =1

本季度

select * from demo where QUARTER(cdate) = QUARTER(now());

上季度

select * from demo where QUARTER(cdate)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));

年数据

select * from demo where YEAR(cdate) = YEAR(NOW());

去年数据

select * from demo where year(cdate) = year(date_sub(now(),interval 1 year));
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用 MySQL 的内置函数 `DATE_FORMAT()` 和 `NOW()` 来获取本周第一天、本月第一天和本年第一天的值。 查询本周第一天的 SQL 语句如下: ``` SELECT DATE_FORMAT(NOW() - INTERVAL WEEKDAY(NOW()) DAY ,'%Y-%m-%d'); ``` 查询本月第一天的 SQL 语句如下: ``` SELECT DATE_FORMAT(NOW() ,'%Y-%m-01'); ``` 查询本年第一天的 SQL 语句如下: ``` SELECT DATE_FORMAT(NOW() ,'%Y-01-01'); ``` 在 MyBatis 的映射文件 `TrendMapper.xml` 中,你需要添加三个参数,分别对应本周第一天、本月第一天和本年第一天的值。然后在 SQL 语句中使用这三个参数来替换原来的日期值。 修改后的 SQL 语句如下: ``` SELECT DATE_FORMAT(statistics_date, '%Y-%m-%d') as statisticsDate, COUNT(*) as lotteryWinCount FROM t_lottery_statistics_prize WHERE statistics_date BETWEEN #{weekBegin} AND NOW() AND statistics_date >= #{monthBegin} AND statistics_date >= #{yearBegin} GROUP BY DATE_FORMAT(statistics_date, '%Y-%m-%d') ORDER BY DATE_FORMAT(statistics_date, '%Y-%m-%d') DESC ``` 其中,`#{weekBegin}`、`#{monthBegin}` 和 `#{yearBegin}` 分别对应本周第一天、本月第一天和本年第一天的参数。 在 Java 代码中,你需要定义这三个参数的值,并将它们传递给 MyBatis 的 SQL 语句。 示例代码如下: ```java public List<Trend> selectTrend() { Date weekBegin = ... // 计算本周第一天的值 Date monthBegin = ... // 计算本月第一天的值 Date yearBegin = ... // 计算本年第一天的值 Map<String, Object> paramMap = new HashMap<>(); paramMap.put("weekBegin", weekBegin); paramMap.put("monthBegin", monthBegin); paramMap.put("yearBegin", yearBegin); return sqlSession.selectList("com.yuxiang.dtsociety.lottery.dao.TrendDao.selectTrend", paramMap); } ``` 其中,`weekBegin`、`monthBegin` 和 `yearBegin` 参数是新增的。在 `paramMap` 中,将这三个参数都传递给 MyBatis 的 SQL 语句。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值