这是花了一个小时实践出来的!

网上有特别多的distinct +group by 的比较区别的,几乎没有几篇文章说他们的联合妙用。

步入正题,先说我发现妙用的基于实际问题:

库存与入库单的一个关系业务:在统计库存时,需要带出与库存相关的且是最近的入库单的一个入库人作为库存数据的一个属性
那么问题来了,业务中一个库存记录可能会存在多张入库单与之关联,要去取最新的入库单的信息与库存信息关联,假设关联入库单信息为lastInUserName(最后入库人),不可避免的查出一个重复的库存记录,但实际上数据库只有一条这样的记录,
那咋整: 是的 group by 登场了,我直接group by 库存记录id ,就只会存在一条记录了,group by必须存在。
未满足的要求:我们还需要取最新的库存入库单的信息condition_in,怎么取呢?我们既不能简单升序或降序来排序入库单号、id,实际入库时间来获取到我们想要的结果。
为什么? 因为我们不止一条库存记录,而且 group by 本身是不会排序的,他只会保留最早物理插入数据库的那个符合去重的条件(某些业务可能刚刚需要这样的),和本次要求是不符合的,而且order by 也不能用,因为他执行顺序在group by 后,因此没了意义。
怎么办? 请出正确方法:distinct +group by +嵌套结果,一套组合语法打到数据上,完美

来看业务sql(已删除大部分无关表信息):

tsn.id 库存id
lastInUserName 最新库存入库单信息
storage_time 实际入库时间,希望取得分组内最新入库时间,遗憾的是单靠group by无法实现
SELECT* from (
SELECT distinct tsn.id stockId,tsi.storage_user_name lastInUserName,cast( tsn.id AS CHAR ) id
FROMINNER  JOIN tdm_stock_in_head tsi ON tsi.stock_in_code in(SELECTin_out_id FROMtdm_stock tb WHEREAND tb.is_delete = 0 AND tsi.is_delete = 0 AND tsi.audit_status = 1 AND in_out_id LIKE 'R%' group by in_out_id)
ORDER BY  tsi.storage_time DESC) tmp group by tmp.stockId

我圈出了实现的关键步骤:

实现步骤实际比较简单:现在内部使用distinct关键字对库存id等多列去重(实际上几乎去不掉数据,时间一般不同,但是他会排序(指的是加order by后的排序结果能影响到group by)),外加一个时间降序排序,解决了group by 无法排序的问题

此时再包一个select * 并group by 就能达到效果了

大家踊跃实践呀!加油

库存生产-实用sql知识:如何在保证去重分组的情况下获取组内最新数据(可按时间排序),distinct +group by +嵌套结果 的联合妙用相关推荐

  1. SQL Server 2005数据库日志文件损坏的情况下如何恢复数据库

    在某些偶然的情况下,会引起SQL Server 2005数据库日志文件的损坏,比如:硬件故障.计算机非正常重启或关机. 当SQL Server 2005数据库日志文件损坏时,可能会出现以下情况: 1. ...

  2. oracle 查询语句取别名,实用sql查询语句详解1:给列取别名、查询部分行、多列排序...

    SQL(Structured Query Language)是用于访问和处理数据库的标准计算机语言,是所有数据库查询的语言,无论是高级查询还是低级查询, 文章介绍了包括查询全部的行和列.给列取别名.查 ...

  3. SQL Server 2005 在只有MDF文件的情况下恢复(丢失日志文件)

    在sql server 2005 数据库中,一次误操作,分离数据库后,直接将日志文件删除掉了,后进行附加出错,无法附加上去,经过如下解决方案,数据库附加成功,操作如下:  第一步:先建立一个同名数据库 ...

  4. sql server 2000 数据库。 怎样用sql语句,在没有主键的情况下删除数据库中多条......

    2019独角兽企业重金招聘Python工程师标准>>> 如题. 转载于:https://my.oschina.net/didiaomo2014/blog/15977

  5. 有的歌声音大有的歌声音小_同样是mp3格式的歌,同一个耳机,在保证音量大小不变情况下,为什么有的歌声音大有的歌声音小?...

    现有的流行音频格式并没有强制平均响度的统一性,MP3 格式也是一样.如果你把两个音量差距巨大的 MP3 文件按 BS.1770-3 标准计算响度的话,得到的响度数值肯定相差很多.如果编辑成同一响度,听 ...

  6. JAVA【1024】程序员趣味活动,给定一串数字字符串,保证顺序不变的情况下,加入任意数量个“+“,使其结果等于1024

    题目要求: 在数字之间任意添加"+"号,使等式成立=1024,数字的顺序不能改变. 举例: 题目1:512512=1024 答案1:512+512=1024 题目2:2562565 ...

  7. 集群高并发情况下如何保证分布式唯一全局ID生成

    作者:轻狂书生 blog.csdn.net/LookForDream_/article/details/109355335 前言 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问 ...

  8. 两个鸡蛋测试:从100层楼往下扔鸡蛋,求最坏情况下确认保证鸡蛋可以不破的最大楼层所需次数

    最坏情况下求得最优解所需的次数 内容说明 本文是在看过<<妙解谷歌压箱底面试题:如何正确的从楼上抛鸡蛋>>一文以后做的总结,该文章对此问题描写的很详细,但是在拜读的过程中也花了 ...

  9. SPL 简化 SQL 案例详解:组内运算

    在开发数据库应用时,经常在分组后需要对组内数据进行计算,例如:列出近3年每年都发表过论文的学生名单(按论文发表年分组后列出每年都出现的学生清单),统计全部参加了历次培训的员工(按培训分组后统计每次都有 ...

最新文章

  1. 不经历风雨,怎么能见彩虹!马克斯与我的不解之缘!
  2. yum 报错:centos yum (28, 'Connection time-out') Trying other mirror.
  3. 如何跳出两层循环嵌套
  4. react 图像识别_无法在React中基于URL查找图像
  5. 表观遗传小白逆袭之道:从这 19 个视频开始吧!
  6. 项目管理的几个概念(WBS、OBS、RBS、BOM、CWS、CA)总结与区分
  7. iOS 图片拉伸、拉伸两端保留中间
  8. python编程语言-python编程语言基础知识总结
  9. 超级计算机运行吃鸡,决赛圈的时候,如果两个人同时被手雷炸死该怎么办呢?...
  10. Nginx源码分析 - 主流程篇 - Nginx的启动流程(09)
  11. 借助 Material You 动态配色丰富您的应用
  12. 计算机二级Python笔记——第一部分
  13. 广度优先搜索生成树怎么画_无向图的深度优先生成树和广度优先生成树
  14. pyqt5 失焦 监听无操作 定时器
  15. ROS系统学习5---OpenCV的使用
  16. CGAL 4.11 官方文档 软件包概述 ——胞腔复形与多面体类
  17. 如何把小米手机便签内容云同步到iPhone XS上?
  18. 关于MYM码支付系统
  19. 【实验6】MPEG音频编码实验
  20. java获取jdk存放路径,javac.exe命令文件存放在JDK安装目录的lib目录下。()

热门文章

  1. 解决element-ui的表格设置固定栏后,边框线消失的bug
  2. Tomcat设置Http自动跳转Https
  3. Unity3D学习(七):Unity多重采样抗锯齿设置无效的解决办法
  4. 广播(broadcast)、电视与电视网络
  5. Java:多线程,CyclicBarrier同步器
  6. 浅谈ref与out区别
  7. sqli-labs 30到65关
  8. java 求集合平均数_图像二值化方法介绍(转载学习)
  9. OpenGL ES之GLSL实现索引绘制及渲染纹理和颜色混合
  10. iOS之高德地图定位偏移以及经纬度之间的转换