Query: Balance on all accounts

DECLARE @GLAccountSearchStr varchar(30);
DECLARE @Date date;
Set @GLAccountSearchStr = '513';
Set @Date = '31/12/2023';

Select [LogicalName], [Number], [Currency], [ResMaxDate], Sum(Round([CyResult], 2)) as [CyResult] from

(
Select [Licence].[DeMaSy].[DBList].[LogicalName], [GLAccount].[Number], [Country].[Currency], '00:00:00' as [ResMaxDate], Sum([GLAccountCur].[CyAmount]) as [CyResult]
from ((([GLAccountCur]
INNER JOIN [GLAccount]
ON ([GLAccountCur].[GLAccountId] = [GLAccount].[Id] and [GLAccountCur].[DBId] = [GLAccount].[DBId]))
INNER JOIN [Country]
ON ([GLAccountCur].[CurrencyId] = [Country].[Id] and [Country].[DBId] = 0))
INNER JOIN [Licence].[DeMaSy].[DBList]
ON ([GLAccountCur].[DBId] = [Licence].[DeMaSy].[DBList].[DBId]))
where [GLAccount].[Number] like @GLAccountSearchStr + '%'
Group by [Licence].[DeMaSy].[DBList].[LogicalName], [GLAccount].[Number], [Country].[Currency]

Union All

Select [Licence].[DeMaSy].[DBList].[LogicalName], [GLAccount].[Number], [Country].[Currency], Max([GLMovement].[Date]) as [ResMaxDate], Sum(Case When [GLMovement].[CD] = 'D' Then [GLMovement].[CyAmount] Else -[GLMovement].[CyAmount] End) as [CyResult]
from ((([GLMovement]
INNER JOIN [GLAccount]
ON ([GLMovement].[GLAccountId] = [GLAccount].[Id] and [GLMovement].[DBId] = [GLAccount].[DBId]))
INNER JOIN [Country]
ON ([GLMovement].[CurrencyId] = [Country].[Id] and [Country].[DBId] = 0))
INNER JOIN [Licence].[DeMaSy].[DBList]
ON ([GLMovement].[DBId] = [Licence].[DeMaSy].[DBList].[DBId]))
where [GLAccount].[Number] like @GLAccountSearchStr + '%'
and [GLMovement].[Date] < @Date
Group by [Licence].[DeMaSy].[DBList].[LogicalName], [GLAccount].[Number], [Country].[Currency]
) as [ResTable]
Group by [LogicalName], [Number], [Currency], [ResMaxDate]
having Not Sum(Round([CyResult], 2)) = 0
and Year([ResMaxDate]) = 2023
order by [LogicalName], [Number], [Currency]