Sql Oracle按日期选择最近的值
我有大量的数据库记录,每个实验间隔数周,通常大约间隔2-3周。目标是按日期选择最新的结果以生成报告。下面是一个示例数据集。对于该数据集,目标是选择最后一行,因为它是对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
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;