获取每个DATE_STAMP对应最新DATA_UPDATE_DATETIME单条数据的SQL查询
解决方案
方法一:使用ROW_NUMBER()窗口函数
按日期分区,每个分区内按更新时间降序排序,取排序第一的行,就是对应日期的最新记录:
SELECT DATE_STAMP, MIN_TEMP, MAX_TEMP, DATA_UPDATE_DATETIME FROM ( SELECT DATE_STAMP, MIN_TEMP, MAX_TEMP, DATA_UPDATE_DATETIME, ROW_NUMBER() OVER (PARTITION BY DATE_STAMP ORDER BY DATA_UPDATE_DATETIME DESC) AS rn FROM your_table_name -- 替换为你的实际表名 ) t WHERE rn = 1;
方法二:内连接匹配最新更新时间
先获取每个日期的最晚更新时间,再关联原表拿到对应温度数据:
SELECT t1.DATE_STAMP, t1.MIN_TEMP, t1.MAX_TEMP, t1.DATA_UPDATE_DATETIME FROM your_table_name t1 INNER JOIN ( SELECT DATE_STAMP, MAX(DATA_UPDATE_DATETIME) AS latest_update FROM your_table_name GROUP BY DATE_STAMP ) t2 ON t1.DATE_STAMP = t2.DATE_STAMP AND t1.DATA_UPDATE_DATETIME = t2.latest_update;
你之前写法的问题
你用min(DATA_UPDATE_DATETIME)取的是最早更新时间,和需求的“最新”相反;而且DISTINCT无法保证温度字段与更新时间对应,因为窗口函数仅计算出一个值,不会过滤同一日期下的其他行,导致结果出现重复日期、温度值不匹配的情况。
内容的提问来源于stack exchange,提问作者kman5554
相关产品推荐
相关产品推荐

