最近策划给了博主一个这样的需求:

用户投放一次垃圾后,在数据库增加一条垃圾投放记录,并给它相应的积分。

然后。用户可以获取自己本月、本年的总积分(将每条记录的积分加起来)排名。

这里附上建表语句

CREATE TABLE `launch_info` (

`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,

`userId` int(10) NOT NULL COMMENT '用户id',

`time` datetime(0) NOT NULL COMMENT '投放时间',

`weight` double(10, 2) NOT NULL COMMENT '本次投放重量',

`score` int(8) NOT NULL COMMENT '本次投放获取的积分',

PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

INSERT INTO `launch_info` VALUES (3, 1, '2019-05-29 20:01:01', 10.00, 100);

INSERT INTO `launch_info` VALUES (4, 1, '2019-05-29 20:05:22', 10.00, 100);

INSERT INTO `launch_info` VALUES (5, 2, '2019-05-12 10:18:20', 20.00, 200);

INSERT INTO `launch_info` VALUES (6, 3, '2019-05-13 10:18:38', 15.00, 10);

INSERT INTO `launch_info` VALUES (7, 2, '2018-05-12 10:12:12', 10.00, 123);

INSERT INTO `launch_info` VALUES (8, 3, '2019-05-30 22:29:29', 10.00, 50);

INSERT INTO `launch_info` VALUES (9, 4, '2019-05-02 21:16:50', 0.00, 0);

INSERT INTO `launch_info` VALUES (10, 3, '2019-04-05 22:38:36', 1.00, 1000);

INSERT INTO `launch_info` VALUES (11, 5, '2019-05-23 23:40:20', 1.00, -1);

好吧。问题要一个一个来解决。

第一个问题-------怎么根据时间来查询本月、本年的总积分呢

select userId,sum(weight) total_weight

from launch_info where userId = 1

and DATE_FORMAT(time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m')

附查询的sql语句如上所示,其实这条语句就是一个普通的查询语句,只是在后面加了一个

and DATE_FORMAT(time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m')

这里说明一下这条语句。DATE_FORMAT()函数,顾名思义,是一个将日期格式化的函数。然后这里的 CURDATE()是获取当前的时间,这条语句的意思就是将这条记录的时间和现在的时间同时按这个格式化规则进行格式化,如果结果相同,就代表了是本月的。

那么查询本年的数据也是一样的,只要把这条语句改成

and DATE_FORMAT(time,'%Y') = DATE_FORMAT(CURDATE(),'%Y')

或者是

YEAR(time)=YEAR(NOW())

就行了。

emmm,虽然策划是只要求博主做查询本月和本年的记录,但是万一以后又遇到要查本天的、半年之内的。。。。

所以,博主干脆一次性的做个记录把,也顺带分享给大家。

Let's go

查询本天

TO_DAYS(time) = TO_DAYS(NOW())

查询n天之前的

TO_DAYS(NOW()) - TO_DAYS(time) = ?

比如查昨天的 n 就等于1,查前天的n就等于2.(博主好像有点啰嗦)

查询前n天之内的(包括了今天)

DATE_SUB(CURDATE(), INTERVAL ? DAY) < date(time)

DATE_SUB() 函数的功能是从日期减去指定的时间间隔。

查询本月

DATE_FORMAT(time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m')

查询第n个月前的

WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),'%Y%m'), DATE_FORMAT(time,'%Y%m')) = ?

PERIOD_DIFF(P1,P2)函数的功能是返回周期P1和P2之间的月数。 P1和P2格式为YYMM或YYYYMM

查询n个月之内的

DATE_SUB(CURDATE(), INTERVAL ? MONTH) < time

查询本年

DATE_FORMAT(time,'%Y') = DATE_FORMAT(CURDATE(),'%Y')

YEAR(time)=YEAR(NOW())

哎呀,太多了。博主已经不想再往下写了,等以后如果用到了博主再加上来把。

emmm,剩下的问题就是根据总分来对用户进行排名了。

具体操作请参见博主下一篇博客

https://blog.csdn.net/zhousw1999/article/details/89742059

mysql如何查询本年_mysql 查询本月、本年的数据相关推荐

  1. mysql 一周一月_mysql查询当天、本周,本月,上一个月的数据

    今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...

  2. mysql 查询今天_mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句

    mysql查询今天,昨天,近7天,近30天,本月,上一月数据的方法分析总结: 话说有一文章表article,存储文章的添加文章的时间是add_time字段,该字段为int(5)类型的,现需要查询今天添 ...

  3. mysql 查询小数点_MySQL查询小数点位数

    怎么查询某个字段中小数有几位? MySQL数据库: 通过下面sql就可以查出来,有2位col*100,有3位col*1000,一次类推: select * from ws_inventory_item ...

  4. mysql 获取倒数第二_MySQL查询倒数第二条记录实现方法

    有时候会用到查询倒数第二条记录复制代码 代码如下:last=HolderChangeHistory.find_by_sql (["               SELECT * FROM h ...

  5. mysql数据库查询缓存_MySQL查询缓存与数据库管理

    MySQL查询缓存与数据库管理 上一篇 / 下一篇  2010-01-25 21:51:07 / 个人分类:MYSQL/Cache MySQL查询缓存 注意:查询缓存绝不返回过期数据. 如果一个表发生 ...

  6. mysql复杂连接查询语句_MySQL查询语句之复杂查询

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  7. mysql查询过程从客户端发送查询请求_MySQL查询过程和高级查询

    最近有个需求,要修改现有存储结构,涉及查询条件和查询效率的考量,看了几篇索引和HBase相关的文章,回忆了相关知识,结合项目需求,说说自己的理解和总结. 总体目录如下,上篇介绍了前3小节,分析了索引为 ...

  8. php mysql 查询缓存_mysql 查询缓存使用详解

    MySQL server 有一个重要的特征:查询缓存(Query Cache). 当在使用中,查询缓存会存储一个 SELECT 查询的文本与被传送到客 户端的相应结果.如果之后接收到一个同样的查询,服 ...

  9. mysql日志查询指令_MySQL查询日志总结

    MySQL查询日志介绍 MySQL的查询日志记录了所有MySQL数据库请求的信息.无论这些请求是否得到了正确的执行.默认文件名为hostname.log.默认情况下MySQL查询日志是关闭的.生产环境 ...

  10. mysql 查询语句_MySQL查询语句之复杂查询

    MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.在MySQL中经常会有很多复杂的查询,为了节约大家的时间,小编总 ...

最新文章

  1. Modelsim do文件的自动化仿真及模板
  2. Java进阶:ReentrantLock和Condition基本使用
  3. java设计模式迭代器模式_迭代器设计模式示例
  4. Python学习笔记(数据类型)
  5. python对字符串使用【函数】加工目录
  6. exchange server 2013 owa界面语言修改为中文
  7. 自行车测速器怎么调_怎么测甲醛?
  8. 开源 php 生活黄页,15个PHP库,你值得拥有!(上)
  9. 祝微软北京.net俱乐部徐磊生日快乐
  10. Shawn找到组织了!!!!!!!!
  11. MAC电脑触摸板手势(提高办公效率)
  12. HDU 4585 Shaolin (STL)
  13. nuxt使用element ui设置成英文
  14. virtualBox安装centos6增强包报错解决及配置共享文件夹
  15. python 不区分大小写的字典实现
  16. java计算机毕业设计夕阳红养老院系统源码+lw文档+系统+数据库
  17. perl中DBD-oracle安装,perl DBD :: Oracle模块安装
  18. signal函数——自定义信号处理方式
  19. 【TMT数据传不到MES中间库】-F18
  20. #2020寒假集训#树形基础入门(Tree)代码笔记

热门文章

  1. 《jQuery、jQuery UI及jQuery Mobile技巧与示例》——9.17 技巧:使用多个列
  2. Oracle逻辑空间管理
  3. ./configure,make,make install的作用
  4. JavaIO4--ObjectInputStream和ObjectOutputStream
  5. LINQ系列:LINQ to ADO.NET概述
  6. 2019牛客提前批一血:猝不及防的java实习面经
  7. python 笔记 之 requests获取网络数据
  8. storm kafkaSpout 踩坑问题记录! offset问题!
  9. JavaScript强化教程——jQuery选择器
  10. redis 启动时 Warning 警告解决及说明