获取Oracle数据库中列的最后一个值

时间:2017-05-13 10:48:11

标签: sql oracle

我在oracle 10g中有一个表,我希望根据某些条件获取表的指定列的最后一个值。如何在NetBeans for exp中为此编写查询。假设我想获得balance列的最后一个值student id = 101class = nurseryacademic year = 2014

3 个答案:

答案 0 :(得分:1)

您可以使用ROWNUM来限制结果数量。

要获取last条记录,您必须根据条件sort记录。

您的查询示例可以是。

select * from (
    select * from student 
    where class='nursery' and academic_year=2014
    order by id desc
) where ROWNUM=1;

这将按DESCENDINGid顺序对记录进行排序,并从结果中返回first record

<强>更新

正如MT0在评论中所提到的,ROWNUM值将在ORDER BY子句之前分配。因此,可能导致不正确的结果。

我已更正上述查询,现在

  1. 子查询将按id的降序对记录进行排序。
  2. 将对结果进行选择。 (WHERE ROWNUM=1)

答案 1 :(得分:0)

从oracle 10g开始,您可以使用LAST_VALUE函数。假设每个学生的“余额”可以通过某个时间变量排序,并且如果student_id在academic_year中是唯一的,则为:

   SELECT student_id, academic_year,class, LAST_VALUE(balance) OVER
   (PARTITION BY student_id, academic_year,class ORDER BY time_variable desc) AS 
   last_balance from student where student_id ...; 

此查询的第一行包含最新值“balance”(last_balance)

答案 2 :(得分:0)

我使用的是一个不同的查询。不知道为什么,但总是将子查询中的rownum作为新列

select m.* from (
       select rownum as rn, t.* from student t
       where t.class='nursery' and t.academic_year=2014
       order by t.di desc) m
where m.rn=1;