如果条件与第一行匹配,如何选择表中的最后一行

时间:2016-12-29 22:02:31

标签: sql

所以我需要选择每个财政年度的记录,但前提是第一个记录是在同一个财政年度。例如:

Acc_ref  Fin_year  Amount  Balance  Date
123      2014      -10     80   01.06.2014
123      2014      -10     90   01.05.2014
123      2014      100     100  01.04.2014
321      2014      -10     80   01.04.2014
321      2013      -10     90   01.03.2014
321      2013      100    100   01.02.2014

在这个例子中,我想从fin_year与第一行匹配的最后一行中选择acc_ref和balance。因此我只期望看到123(acc_ref)和80(余额)。

选择acc_ref,日期,余额 来自tablename其中(acc_ref,date)in(     选择acc_ref,max(日期)作为日期     来自tablename     按acc_ref分组

但也想说明fin_year匹配最小日期fin_year

可以这样做吗?

2 个答案:

答案 0 :(得分:0)

我不认为这是一个好问题,但如果你有ID AUTO_INCREMENT这样的东西,那么你可以将它作为第一个也是最后一个使用,你可以编写一个检查min(ID)的SQL查询并显示max(ID)

答案 1 :(得分:0)

如果我理解这个问题,这是一个可能的解决方案。

我按Acc_ref分区并按Acc_ref, date排序的行编号,然后在YEAR(Date)匹配Fin_year时选择第一行

with cteB (Acc_ref, Fin_year, Amount, Balance,  Date, Row)
as
(
    select Acc_ref, Fin_year, Amount, Balance,  Date,
           row_number() over (partition by Acc_ref order by Acc_ref, date) as Row
    from
         your_table
)
select Acc_ref, Fin_year, Amount, Balance, Date, Row
from cteB
where Row = 1 and Fin_year = year(Date);