SQL分组统计查询中实现最新录入电阻记录置顶的方法咨询
最近录入的电阻优先排序的统计SQL实现方案
你当前写的分组统计、计算每个电阻累计录入次数的逻辑是完全没问题的,要实现「最近录入的电阻对应统计行排结果最顶部」的需求,不用改动原有核心统计逻辑,只需要补充排序依据就行。
实现逻辑说明
- 首先先确定表里用来判断录入先后的字段,一般有两类可选:
- 表自带的自增主键(比如常用的
id字段,数值越大代表录入时间越靠后) - 记录录入时间的字段(比如
submit_time、create_time,时间值越大代表录入时间越晚)
- 表自带的自增主键(比如常用的
- 因为是按
RT_resistor做分组统计,所以只要对选中的顺序字段取组内最大值,这个值就是对应电阻最近一次录入的标识 - 最后按这个最大标识做倒序排序,就能保证最新被录入的电阻,对应的统计行会排在结果集最靠前的位置。
具体SQL写法
场景1:用自增主键判断录入顺序
如果表中存在自增主键id作为录入顺序的判断依据,可直接按以下方式编写SQL,不需要改动原有查询的列结构:
SELECT RT_resistor, COUNT(RT_resistor) as qty FROM RMR_RT_resistor WHERE location = 'KOG' AND PL = 'PBW' AND Submit_User='1' AND RT_label='Mohm' AND resistor_type='MF' GROUP BY RT_resistor -- 按组内最大自增ID倒序,最新录入的排最前 ORDER BY MAX(id) DESC
场景2:用录入时间判断顺序
如果表中是靠录入时间字段(比如字段名为submit_time)判断录入先后,只需要把排序部分的聚合逻辑替换为取最大时间值即可:
SELECT RT_resistor, COUNT(RT_resistor) as qty FROM RMR_RT_resistor WHERE location = 'KOG' AND PL = 'PBW' AND Submit_User='1' AND RT_label='Mohm' AND resistor_type='MF' GROUP BY RT_resistor ORDER BY MAX(submit_time) DESC
注意:直接把聚合逻辑写在
ORDER BY子句里的写法,不会改变原有查询返回的列结构,完全适配你现有的结果读取逻辑,不需要做额外适配。如果后续需要在结果里同时展示每个电阻最近一次的录入时间,只需要把对应的MAX()值加到SELECT子句里就行。
内容的提问来源于stack exchange,提问作者Nadishka Jayashan
相关产品推荐
相关产品推荐

