2016-12-29 1 views
-1

Je dois donc sélectionner l'enregistrement pour chaque exercice, mais uniquement si le premier enregistrement est dans le même exercice financier. Par exemple:Comment sélectionner la dernière ligne d'un tableau si les critères correspondent à la première ligne

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 

Dans ce cas, je voudrais choisir le acc_ref et l'équilibre de la dernière ligne où l'fin_year correspond à celle de la première rangée. Par conséquent je m'attendrais seulement à voir 123 (acc_ref) et 80 (balance).

select acc_ref, la date, l'équilibre de tablename où (acc_ref, date) dans ( select acc_ref, max (date) que la date du groupe tablename par acc_ref)

mais veulent aussi dire où fin_year matches min date fin_year

Est-ce que cela peut être fait?

+1

db quelle plate-forme? S'il vous plaît montrer les données sous forme de tableau. Impossible à lire. – OldProgrammer

+6

Qu'est-ce que "première rangée"? Ce n'est pas un concept SQL. Les tableaux représentent des ensembles non ordonnés. –

Répondre

0

je ne pense pas que si cela est une bonne question, mais si vous aviez quelque chose comme ID AUTO_INCREMENT pour que vous puissiez l'utiliser comme premier et dernier et vous pouvez écrire une requête SQL qui vérifie min(ID) et montre max(ID)

0

Si je comprendre la question, c'est une solution possible.

I lignes dénombra le partitionnement par Acc_ref et commande par Acc_ref, date, puis sélectionnez la première ligne si YEAR(Date) match de 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);