一个sql语句中实现统计本周第一天 本月第一天 本年第一天起到今天为止的中奖趋势
时间: 2024-03-27 20:40:29 浏览: 44
sql server 查询当天,本周,本月,本年,30天内的数据的sql语句
你可以使用 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 语句。
阅读全文