我在oracle 10g中有一个表,我希望根据某些条件获取表的指定列的最后一个值。如何在NetBeans for exp中为此编写查询。假设我想获得balance
列的最后一个值student id = 101
,class = nursery
和academic year = 2014
答案 0 :(得分:1)
您可以使用ROWNUM
来限制结果数量。
要获取last
条记录,您必须根据条件sort
记录。
您的查询示例可以是。
select * from (
select * from student
where class='nursery' and academic_year=2014
order by id desc
) where ROWNUM=1;
这将按DESCENDING
按id
顺序对记录进行排序,并从结果中返回first record
。
<强>更新强>
正如MT0在评论中所提到的,ROWNUM
值将在ORDER BY
子句之前分配。因此,可能导致不正确的结果。
我已更正上述查询,现在
id
的降序对记录进行排序。(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;