2017-06-01 102 views
-1

我有许多数据库记录用于隔开数周(通常相距大约2-3周)的实验。目标是按日期选择最近的结果以生成报告。这是一个示例数据集。对于此数据集,目标是挑选最后一行,因为这是最近一次对QL_IDP14404进行的测量。Oracle按日期选择最新值

QL_ID是主键和QL_VAL是样本的测量值和MEASUREMENT_DATE是采取测量的日期。表名是QL_RESULTS。通过使用下面的查询,我能够得到最近的日期和QL_ID,但我坚持如何获得所有3列,即QL_VAL,QL_ID,MEASUREMENT_DATE

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

QL_VAL QL_ID  MEASUREMENT_DATE 
    25  P14404  01-JUL-10 
    30  P14404  15-JUL-10 
    21  P14404  29-JUN-10 
+0

我看到众所周知的解决方案正是我所知道的 寻找。 – BreenDeen

回答

0

你可以根据计量日每ql_idrank您行:

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 
0

我想苗条的解决方案是这样的一个:

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; 
+0

非常感谢!也适用,如果我可以接受这两种解决方案,那将会很好。 – BreenDeen

+0

@BreenDeen,你至少可以打个招呼:-) –