Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Lag для каждого последующего пустого значения / 5 сообщений из 5, страница 1 из 1
30.07.2021, 18:03
    #40087404
Bereteli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lag для каждого последующего пустого значения
Ребята, подскажите пожалуйста, как заставить LAG возвращать предыдущее значение, если оно Null и пускать его вниз.

Цель что бы везде в колонке lag1 через функцию возвращался try1


WITH t1 AS (SELECT 'A' AS tovar,'1' AS num, 'try1' AS try
union all SELECT 'A' AS tovar,'1' AS num, null
UNION ALL SELECT 'A' AS tovar,'1' AS num,null )

SELECT *,lag (try) OVER (partition by tovar ORDER BY num) as lag1FROM t1
...
Рейтинг: 0 / 0
30.07.2021, 18:52
    #40087408
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lag для каждого последующего пустого значения
Bereteli,


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
WITH t1 AS (
	      SELECT 'A' AS tovar,1 AS num, 'try1' AS try
union all SELECT 'A' AS tovar,2 AS num, null
UNION ALL SELECT 'A' AS tovar,3 AS num,null 
UNION ALL SELECT 'A' AS tovar,4 AS num,'try2'
UNION ALL SELECT 'A' AS tovar,5 AS num,null 

UNION ALL SELECT 'B' AS tovar,1 AS num, 'try1' AS try
union all SELECT 'B' AS tovar,2 AS num, null
UNION ALL SELECT 'B' AS tovar,3 AS num,'try2'

)
SELECT MAX(try) OVER (PARTITION BY  tovar, LAST_NUM) AS LAG1,  * FROM 
(
	SELECT *,MAX(IIF(try IS NOT NULL, num, NULL)) OVER (partition by tovar ORDER BY num ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) as LAST_NUM FROM t1
) b
...
Рейтинг: 0 / 0
02.08.2021, 11:02
    #40087790
Bereteli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lag для каждого последующего пустого значения
a_voronin,

Спасибо большое, Ваша задача дала толчок для ответа. Для моего решения 1 preceding заменить на 0 preceding, т.к. задача заключалась возвращать предыдущее значение, а не следующее после пустых.
...
Рейтинг: 0 / 0
02.08.2021, 11:38
    #40087802
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lag для каждого последующего пустого значения
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
with t1 as (
select 'a' as tovar,1 as num, 'try2' as try
union all select 'a' as tovar,2 as num, null
union all select 'a' as tovar,3 as num,null 
union all select 'a' as tovar,4 as num,'try1'
union all select 'a' as tovar,5 as num,null 

union all select 'b' as tovar,1 as num, 'try1' as try
union all select 'b' as tovar,2 as num, null
union all select 'b' as tovar,3 as num,'try2'
),
t2 as
(
 select
  tovar, num, try,
  max(str(num, 10) + try) over (partition by tovar order by num rows between unbounded preceding and 1 preceding) as s
 from
  t1
)
select
 tovar, num, try,
 isnull(try, substring(s, 11, cast(0x7fffffff as int))) as try_new
from
 t2;
...
Рейтинг: 0 / 0
12.08.2021, 17:23
    #40090380
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lag для каждого последующего пустого значения
Bereteli
a_voronin,

Спасибо большое, Ваша задача дала толчок для ответа. Для моего решения 1 preceding заменить на 0 preceding, т.к. задача заключалась возвращать предыдущее значение, а не следующее после пустых.


0 preceding == CURRENT ROW
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Lag для каждого последующего пустого значения / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]