【学习总结】取最新一条记录&组内编号

1 MySQL实现except功能


2 mysql 分组取最新的一条记录(整条记录)

方法1: 先排序,然后再次分组查询(默认第一条),就是最新的一条数据了

group by 语句本身没有排序功能,仅仅group by之后,得到的是每一家公司最早的一条记录,而非最新的一条记录。

group by 比 order by 先执行,无法在分组之前进行排序,因此得到的仍然是每一家公司最早的一条记录,只是将上面SQL语句的显示结果进行排序了。

这条语句相当于在分组之后,选出每一组的最大日期,对分组结果没有影响,max_date 和 PetitionDate 并不一致,因为select 子句是最后执行的。

这条语句和预期效果并不一致,分组结果中大量的记录会丢失,因为having是在分组的时候执行的,也就是说,分组时加上这样一个条件:选出来的PetitionDate要和本组最大的PetitionDate相等。即,本组所有的日期值都相同,如果分组中存在不同的日期值,就会被过滤掉。

原因还是因为group by没有排序功能,所有的这些排序功能只是错觉,最终选出来的PetitionDate和max_date永远不可能相等,除非每个分组中都只有一个日期值。

GROUP BY 在分组的时候,可能是一个一个来找的,发现有相等的companyName,去掉,保留第一个发现的那一条记录,所以找出来的记录永远只是按照默认索引顺序排列的!

这条语句就可以实现先排序再分组,也有网友利用自连接实现,效率应该比子查询高,不过这种应该是比较简单明了的方法。

3 mysql中组内排序编号的一种实现方法

一种比较简单的实现方式,就是用MySQL关联查询。

4. 得到所有公司最新的一条立案状态


group_concat函数

group_concat 函数的语法:

group_concat([distinct] 要拼接的字段 [ORDER BY ASC/DESC 排序字段] [seperator '分隔符'] )

上面的语句得到的结果是每个公司的案件状态的拼接值。

substring_index(被截取字段, 关键字, 关键字出现的次数) : 按关键字截取字符串

你可能感兴趣的:(【学习总结】取最新一条记录&组内编号)