У меня есть база данных, которая содержит финансовую информацию о банках.
Это структура таблицы. Ради простоты я сделал Assets
int.
create table dbo.BankInfo
(
id int,
asofdate date,
Assets int
)
insert into dbo.BankInfo Values(1,'2018-01-31',100)
insert into dbo.BankInfo Values(1,'2017-10-31',200)
insert into dbo.BankInfo Values(1,'2017-07-31',300)
insert into dbo.BankInfo Values(1,'2017-04-30',400)
insert into dbo.BankInfo Values(1,'2017-01-31',40)
insert into dbo.BankInfo Values(1,'2016-10-31',20)
insert into dbo.BankInfo Values(2,'2016-12-31 00:00:00',100)
insert into dbo.BankInfo Values(2,'2017-03-31 00:00:00',200)
insert into dbo.BankInfo Values(2,'2017-06-30 00:00:00',300)
insert into dbo.BankInfo Values(2,'2017-09-30 00:00:00',400)
insert into dbo.BankInfo Values(2,'2017-12-31 00:00:00',300)
insert into dbo.BankInfo Values(2,'2016-03-31 00:00:00',400)
У меня есть еще одна таблица, содержащая информацию о финансовом году каждого банка
create table dbo.yearenddate
(
id int,
enddate date
)
insert into dbo.yearenddate values(1,'2018-01-31 00:00:00')
insert into dbo.yearenddate values(2,'2017-06-30 00:00:00')
Я хочу посмотреть на dbo.BankInfo
, получить Fiscalyearenddate для каждого банка и установить Квартал (Qtr = 4), а другие следуют той же схеме
Вот так выглядит вывод. Я не могу сделать это по рангу.
create table dbo.outputqtr
(
id int,
asofdate date,
Assets int,
qtr smallint
)
insert into dbo.outputqtr Values(1,'2018-01-31',100,4)
insert into dbo.outputqtr Values(1,'2017-10-31',200,3)
insert into dbo.outputqtr Values(1,'2017-07-31',300,2)
insert into dbo.outputqtr Values(1,'2017-04-30',400,1)
insert into dbo.outputqtr Values(1,'2017-01-31',40,4)
insert into dbo.outputqtr Values(1,'2016-10-31',20,3)
insert into dbo.outputqtr Values(2,'2016-12-31 00:00:00',100,2)
insert into dbo.outputqtr Values(2,'2017-03-31 00:00:00',200,3)
insert into dbo.outputqtr Values(2,'2017-06-30 00:00:00',300,4)
insert into dbo.outputqtr Values(2,'2017-09-30 00:00:00',400,1)
insert into dbo.outputqtr Values(2,'2017-12-31 00:00:00',300,2)
insert into dbo.outputqtr Values(2,'2016-03-31 00:00:00',400,3)
У меня есть запрос
SELECT
*,
CASE
WHEN qtrr = 4 THEN 4
ELSE DENSE_RANK() OVER(PARTITION BY ID, MONTH(asofdate)
ORDER BY asofdate DESC)
END AS qtr
FROM
(SELECT
t.*, y.enddate,
CASE
WHEN AsofDate = enddate THEN 4
ELSE 1
END AS qtrr
FROM
dbo.BankInfo t
LEFT JOIN
dbo.yearenddate y ON y.id = t.id AND t.asofdate = y.enddate) t
Любая помощь приветствуется