powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Lag для каждого последующего пустого значения
5 сообщений из 5, страница 1 из 1
Lag для каждого последующего пустого значения
    #40087404
Bereteli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, подскажите пожалуйста, как заставить 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
Lag для каждого последующего пустого значения
    #40087408
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Lag для каждого последующего пустого значения
    #40087790
Bereteli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a_voronin,

Спасибо большое, Ваша задача дала толчок для ответа. Для моего решения 1 preceding заменить на 0 preceding, т.к. задача заключалась возвращать предыдущее значение, а не следующее после пустых.
...
Рейтинг: 0 / 0
Lag для каждого последующего пустого значения
    #40087802
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Lag для каждого последующего пустого значения
    #40090380
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bereteli
a_voronin,

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


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


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