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 

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

  • 相关阅读:
    MySQL单实例、多实例服务脚本
    Shell之case结构条件句
    Shell之函数
    Shell之条件测试
    Shell脚本数字比较与四则运算
    Shell之分支结构
    Shell之变量的数值计算与输入
    Shell之变量子串与变量替换
    表单和框架
    HTML部分标签和代码
  • 原文地址:https://www.cnblogs.com/xzshare/p/13209846.html
Copyright © 2011-2022 走看看