Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 HELP: как обойтись без #  [new]
SangYong
Member [скрыт]

Откуда:
Сообщений: 653
заполнение:
CREATE TABLE #T
(Id INT IDENTITY,CURS float, D date)
 
INSERT INTO #T
VALUES (40.5, '2019-03-01'),
            (60.5, '2019-03-04'),
	    (70.5, '2019-03-08'),
	    (80.5, '2019-03-14'),
	    (90.5, '2019-03-16')

CREATE TABLE #TT
(Id INT IDENTITY, CURS float, DD date)

DECLARE @i INT
DECLARE @DATA date

SET @i = 1
SET @DATA = '2019-03-01'
WHILE (@i <=21)
BEGIN
    INSERT INTO #TT
    VALUES (0, cast(DATEADD(DAY,@i,'2019-03-01T00:00:00.000') as date))
    set @i = @i + 1 
END


нужно получить курс из #T на каждую дату из #TT
помогите обойтись без заполнения #TTT одним волшебным join
пока делаю так - ничего лучшего не придумал:

CREATE TABLE #TTT
(Id INT IDENTITY, CURS float, DD date)

DECLARE @Curs float, @Save float, @DD date
set @Save = 0

DECLARE C CURSOR FAST_FORWARD FOR
select curs,D from 
(
select 1 for_ord,curs,D from #T
union 
select 2 for_ord,curs,DD from #TT
) U order by D, for_ord

OPEN C
FETCH NEXT FROM C INTO @Curs, @DD
WHILE @@FETCH_STATUS = 0
BEGIN
	
	set @save =  iif(@Curs=0, @Save, @Curs)

	INSERT INTO #TTT  VALUES (@Save, @DD)

	FETCH NEXT FROM C INTO @Curs, @DD

END
CLOSE C
DEALLOCATE C

select distinct curs,DD from #TTT
17 мар 19, 11:45    [21835112]     Ответить | Цитировать Сообщить модератору
 Re: HELP: как обойтись без #  [new]
SangYong
Member [скрыт]

Откуда:
Сообщений: 653
забыл
drop table #T
drop table #TT
drop table #TTT
17 мар 19, 11:48    [21835113]     Ответить | Цитировать Сообщить модератору
 Re: HELP: как обойтись без #  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
SangYong
нужно получить курс из #T на каждую дату из #TT
помогите обойтись без заполнения #TTT одним волшебным join
Ну вообще простейший запрос, давным давно так писали:
select tt.DD, (select top 1 t.CURS from #T t where t.D <= tt.DD order by t.D desc) as curs
from #TT as tt
order by tt.DD

Если из #T нужны ещё какие то поля, то нужно переписать на современный манер, используя OVER или CROSS APPLY
17 мар 19, 19:49    [21835358]     Ответить | Цитировать Сообщить модератору
 Re: HELP: как обойтись без #  [new]
SangYong
Member [скрыт]

Откуда:
Сообщений: 653
alexeyvg, премного благодарен....всё накатал за 20 мин, а в селектах
запутался и не смог выбраться...спсб
17 мар 19, 20:59    [21835400]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить