Sql Oracle按日期选择最近的值

Sql Oracle按日期选择最近的值,sql,oracle,greatest-n-per-group,Sql,Oracle,Greatest N Per Group,我有大量的数据库记录,每个实验间隔数周,通常大约间隔2-3周。目标是按日期选择最新的结果以生成报告。下面是一个示例数据集。对于该数据集,目标是选择最后一行,因为它是对QL_IDP14404进行的最新测量 QL_ID是主键,QL_VAL是样本的测量值,MEASUREMENT_DATE是进行测量的日期。表名为QL\u RESULTS。通过使用下面的查询,我能够获取最近的日期和QL\u ID,但我一直在研究如何获取所有3列,即QL\u VAL、QL\u ID、MEASUREMENT\u date SE

我有大量的数据库记录,每个实验间隔数周,通常大约间隔2-3周。目标是按日期选择最新的结果以生成报告。下面是一个示例数据集。对于该数据集,目标是选择最后一行,因为它是对
QL_ID
P14404
进行的最新测量

QL_ID
是主键,
QL_VAL
是样本的测量值,
MEASUREMENT_DATE
是进行测量的日期。表名为
QL\u RESULTS
。通过使用下面的查询,我能够获取最近的日期和
QL\u ID
,但我一直在研究如何获取所有3列,即
QL\u VAL、QL\u ID、MEASUREMENT\u date

SELECT QL_ID,MAX(MEASUREMENT_DATE) FROM QL_RESULTS
GROUP BY QL_ID


您可以根据测量日期,按照
ql_id
对您的行进行排序:

SELECT ql_val, ql_id, measurement_date
FROM   (SELECT ql_val, ql_id, measurement_date,
               RANK() OVER (PARTITION BY ql_id
                            ORDER BY measurement_date DESC) AS rk 
        FROM   ql_results) t
WHERE  rk = 1

我认为超薄的解决方案是:

SELECT QL_ID, MAX(MEASUREMENT_DATE), 
   MAX(QL_VAL) KEEP (DENSE_RANK LAST ORDER BY MEASUREMENT_DATE) as QL_VAL
FROM QL_RESULTS
GROUP BY QL_ID;

非常感谢!同样有效,如果我能同时接受两种解决方案那就太好了。@BreenDeen,你至少可以投赞成票:-)我看到了很多解决方案,但知道的正是我想要的。
SELECT QL_ID, MAX(MEASUREMENT_DATE), 
   MAX(QL_VAL) KEEP (DENSE_RANK LAST ORDER BY MEASUREMENT_DATE) as QL_VAL
FROM QL_RESULTS
GROUP BY QL_ID;