zoukankan      html  css  js  c++  java
  • 记录下sql的小问题

    前段时间因为业务开发需要,需要查询表中所有用户的某一天的多次打卡记录中的最早或者最晚打卡记录,

    需求很好理解,也比较好实现,最开始的想法就是先对用户分组,然后按照时间排序,倒序或顺序得到所求

    sql如下:

    SELECT * FROM A AS a  WHERE a.day=TO_DAYS(?1) GROUP BY a.userId ORDER BY a.day DESC 

    然后发现结果并没有这么简单,

    这样确实可以得到分组的结果,但是始终只会得到时间最早的那一条,无论你是顺序还是倒序,说明它时间排序是无效的

    没办法,只得麻烦点,新增一个子查询,先对它排序,再对它分组

    sql如下:

    SELECT a.* FROM (SELECT * FROM A WHERE TO_DAYS(TIME)=TO_DAYS('2020-06-28')    ORDER BY TIME ASC ) AS a  GROUP BY a.user_id 

    发现虽然排序了,但是获得结果还是和上面一样,始终只能获得最早的那一条

    后面百度多发查找才知道,mysql 5.7版本中,这样分组在排序的,需要增加limit才行,没办法,最终实现方式:

    sql如下:

    SELECT a.* FROM (SELECT * FROM A WHERE TO_DAYS(TIME)=TO_DAYS('2020-06-28')    ORDER BY TIME ASC LIMIT 1000000) AS a  GROUP BY a.user_id 

    虽然问题不是很复杂,但是也踩了几次坑,记录下

  • 相关阅读:
    最简单的jQuery插件
    SQL执行时间
    Resharper 8.2 注册码
    Module模式
    RestSharp使用
    使用MVC过滤器保存操作日志
    Ajax Post 类实例
    IBatis分页显示
    IBatis插入类的实例
    Topcoder SRM629 DIV2 解题报告
  • 原文地址:https://www.cnblogs.com/xzshare/p/13209846.html
Copyright © 2011-2022 走看看