如何查询指定资产指定期间内序列数最大的记录
获取指定条件下序列值最大的记录
针对你的需求,这里提供两种常用的实现方法:
方法一:子查询匹配最大值
先通过子查询算出目标条件下的最大序列值,再筛选对应记录:
SELECT ASSET_MAIN_NUMBER, FISCAL_YEAR_PERIOD, SEQUENCE_NUMBER_IN_THE_PERIOD FROM valuetable WHERE assetnumber = 123 AND FISCAL_YEAR_PERIOD = 2021003 AND SEQUENCE_NUMBER_IN_THE_PERIOD = ( SELECT MAX(SEQUENCE_NUMBER_IN_THE_PERIOD) FROM valuetable WHERE assetnumber = 123 AND FISCAL_YEAR_PERIOD = 2021003 );
如果SEQUENCE_NUMBER_IN_THE_PERIOD是带前导零的字符串(比如'01'、'04'),只要字符串长度统一,MAX()函数能按字符顺序正确识别最大值。
方法二:窗口函数排序取第一条
适用于支持窗口函数的数据库(如MySQL 8+、PostgreSQL、SQL Server等),通过排序标记取第一条:
SELECT ASSET_MAIN_NUMBER, FISCAL_YEAR_PERIOD, SEQUENCE_NUMBER_IN_THE_PERIOD FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY SEQUENCE_NUMBER_IN_THE_PERIOD DESC) AS rn FROM valuetable WHERE assetnumber = 123 AND FISCAL_YEAR_PERIOD = 2021003 ) t WHERE rn = 1;
- 如果存在多条记录序列值同为最大值,
ROW_NUMBER()会随机返回其中一条;若要保留所有最大值记录,可替换为RANK()。 - 若序列值是长度不一致的字符串(如'1'、'10'),需先转为数值类型再排序,比如
ORDER BY CAST(SEQUENCE_NUMBER_IN_THE_PERIOD AS UNSIGNED) DESC(MySQL)。
内容的提问来源于stack exchange,提问作者Arvizu
相关产品推荐
相关产品推荐

