如何基于日期查询不同itemID的最新非空count值
每个itemID最新非空count值查询解法
解法1:窗口函数法(支持MySQL 8.0+、PostgreSQL、SQL Server等主流新版数据库)
先过滤count非空的记录,再按itemID分组对日期倒序排序,取每组第一条即可:
WITH ranked_data AS ( SELECT itemID, count, ROW_NUMBER() OVER(PARTITION BY itemID ORDER BY date DESC) AS rank_num FROM 你的表名 WHERE count IS NOT NULL ) SELECT itemID, count FROM ranked_data WHERE rank_num = 1;
如果同一itemID的最大日期存在多条非空count记录,需要全部返回的话,将ROW_NUMBER()替换为RANK()即可。
解法2:子查询关联法(兼容MySQL 5.x等不支持窗口函数的旧版数据库)
先查询每个itemID对应非空count的最大日期,再关联原表匹配对应记录:
SELECT t1.itemID, t1.count FROM 你的表名 t1 INNER JOIN ( SELECT itemID, MAX(date) AS latest_valid_date FROM 你的表名 WHERE count IS NOT NULL GROUP BY itemID ) t2 ON t1.itemID = t2.itemID AND t1.date = t2.latest_valid_date WHERE t1.count IS NOT NULL;
内容的提问来源于stack exchange,提问作者jove0610
相关产品推荐
相关产品推荐

