powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Правильно указать min и max
22 сообщений из 72, страница 3 из 3
Правильно указать min и max
    #39589053
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

Секрет. Тебе-то зачем?
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589055
Kopelly,

для общего развития... ;) :)
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589058
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в безвоздмездной техподдерже оленей в sql (типо меня)))
KopellyДобрый Э - Эх,

Секрет. Тебе-то зачем?
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589060
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

вот зануда, всё равно 1 проход против 10

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
;WITH x AS
(
	SELECT 
		[r] = RANK() OVER (ORDER BY Value )	,
		[n] = ROW_NUMBER() OVER (ORDER BY f DESC)	,
		f,t,
		HoleId,
		Name,
		Value
	FROM @t
), y AS
(
	SELECT 	
		m = CASE WHEN LEAD(r) OVER (ORDER BY f) <> r OR n = 1 THEN  t ELSE NULL END,	*
	FROM x
)
SELECT 
	LAG(m,1,f) OVER (ORDER BY m),
	m,
	Name,
	Value
FROM y
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589064
TaPaK,

если я в варианте на разности двух разнооконных ROW_NUMBER-ов запрячу в CTE предварительные вычисления, то тоже один проход и получится.... Ещё и с меньшим числом вызовов оконных функций...
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589065
katish444в безвоздмездной техподдерже оленей в sql (типо меня)))
KopellyДобрый Э - Эх,

Секрет. Тебе-то зачем?а ты давай не юли, а говори - смогла перенести на свои таблицы-поля мой вариант запроса?
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589069
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с виртуальной таблицей смогла, выдало то, что надо
как со своими данными начинаю работать - другие результаты
кажется у меня кривые руки

О! Надо это сделать подписью в своем аккаунте

Добрый Э - Эхkatish444в безвоздмездной техподдерже оленей в sql (типо меня)))
пропущено...
а ты давай не юли, а говори - смогла перенести на свои таблицы-поля мой вариант запроса?
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589070
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - ЭхTaPaK,

если я в варианте на разности двух разнооконных ROW_NUMBER-ов запрячу в CTE предварительные вычисления, то тоже один проход и получится.... Ещё и с меньшим числом вызовов оконных функций...
а так что-ли 2 прохода по вашему... прям магия cte....
я сравнивал с OUTER APPLY
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589071
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проверяю, появилась ли подпись
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589079
TaPaK,

по-моему: проход - это один уровень вложенности запроса. вне зависимости от того, сколько раз в итоге сервер будет бегать по одним и тем же таблицам. Если он свернет три уровня вложенности запроса с lead/lag до одного скана таблицы - то честь и хвала ему. Но для меня запрос будет всё одно иметь три уровня вложенности. И я его для себя буду называть "трех проходным".

З.Ы.
Это исключительно для понимания используемой мною терминологии...
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589084
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - ЭхTaPaK,

по-моему: проход - это один уровень вложенности запроса. вне зависимости от того, сколько раз в итоге сервер будет бегать по одним и тем же таблицам. Если он свернет три уровня вложенности запроса с lead/lag до одного скана таблицы - то честь и хвала ему. Но для меня запрос будет всё одно иметь три уровня вложенности. И я его для себя буду называть "трех проходным".

З.Ы.
Это исключительно для понимания используемой мною терминологии...
я так понимаю что ROW_NUMBER для вас штука с безумным количеством проходов... ну ок
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589095
TaPaKя так понимаю что ROW_NUMBER для вас штука с безумным количеством проходов... ну окты если чего-то не понял - переспроси... я же Добрый, я - объясню....

Повторю еще раз. Для меня проход - это одно вложение select.

вот пример однопроходного запроса:
Код: plaintext
1.
2.
3.
select bla-bla-bla 
  from table where bla-bla
 group by bla
 order by bla

вот пример двухпроходного запроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select bla-bla-bla
  from (
         select bla-bla-bla
           from table
          where bla-bla
          group by bla
          order by bla
       ) v0
 where bla-bla
 group by bla
 order by bla

вот пример трехпроходного запроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select bla-bla-bla
  from (
         select bla-bla-bla
          from (
                 select bla-bla-bla
                   from table
                 where bla-bla
                 group by bla
                 order by bla
               ) v0 
         where bla-bla
         group by bla
         order by bla
       ) v1
 where bla-bla
 group by bla
 order by bla

сколько раз и откуда при этом сервер будет перечитывать данные - пока оставим за рамками обсуждения.

Так понятнее, или требуется ещё более подробное разъяснение?
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589098
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

ага, а CTE всё меняет?

авторзапрячу в CTE предварительные вычисления, то тоже один проход и получится
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589099
TaPaK,

это ты сказал, что оно все меняет, когда засунул вычисления row_number и rank в CTE, а в основной части запроса сделал lag и утверждал, что тут один проход, а не 10 как у меня.
Я тебе и сказал - что для меня это всё одно будет два прохода. Хоть один ты и вынес в СТЕ. При этом думал, что ты поймешь сарказм. Но видимо - зря надеялся...
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589100
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - ЭхTaPaK,

это ты сказал, что оно все меняет, когда засунул вычисления row_number и rank в CTE, а в основной части запроса сделал lag и утверждал, что тут один проход, а не 10 как у меня.
Я тебе и сказал - что для меня это всё одно будет два прохода. Хоть один ты и вынес в СТЕ. При этом думал, что ты поймешь сарказм. Но видимо - зря надеялся...
развидеть... забыть... срочно
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589126
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я даже не заметила на каком этапе перестала понимать вашу речь

Добрый Э - ЭхTaPaK,

по-моему: проход - это один уровень вложенности запроса. вне зависимости от того, сколько раз в итоге сервер будет бегать по одним и тем же таблицам. Если он свернет три уровня вложенности запроса с lead/lag до одного скана таблицы - то честь и хвала ему. Но для меня запрос будет всё одно иметь три уровня вложенности. И я его для себя буду называть "трех проходным".

З.Ы.
Это исключительно для понимания используемой мною терминологии...
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589130
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
о, тут я поняла! вы имеете ввиду подзапрос
Добрый Э - ЭхTaPaKя так понимаю что ROW_NUMBER для вас штука с безумным количеством проходов... ну окты если чего-то не понял - переспроси... я же Добрый, я - объясню....

Повторю еще раз. Для меня проход - это одно вложение select.

вот пример однопроходного запроса:
Код: plaintext
1.
2.
3.
select bla-bla-bla 
  from table where bla-bla
 group by bla
 order by bla

вот пример двухпроходного запроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select bla-bla-bla
  from (
         select bla-bla-bla
           from table
          where bla-bla
          group by bla
          order by bla
       ) v0
 where bla-bla
 group by bla
 order by bla

вот пример трехпроходного запроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select bla-bla-bla
  from (
         select bla-bla-bla
          from (
                 select bla-bla-bla
                   from table
                 where bla-bla
                 group by bla
                 order by bla
               ) v0 
         where bla-bla
         group by bla
         order by bla
       ) v1
 where bla-bla
 group by bla
 order by bla

сколько раз и откуда при этом сервер будет перечитывать данные - пока оставим за рамками обсуждения.

Так понятнее, или требуется ещё более подробное разъяснение?
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589137
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katish444,

авторвы имеете ввиду подзапрос
не, он считает количество SELECT и говорит "раз проход"... так наверное удобнее
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589220
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
DECLARE @t TABLE ( [holeid] VARCHAR(30), [from] INT, [to] INT, [name] VARCHAR(30), [value] VARCHAR(30) );
INSERT INTO @t VALUES 
  ( 'hr-1', 0, 8, 'Lith_LoggedBy', 'Петров' ),
  ( 'hr-1', 8, 50, 'Lith_LoggedBy', 'Сидоров' ),
  ( 'hr-1', 50, 100, 'Lith_LoggedBy', 'Сидоров' ),
  ( 'hr-1', 100, 150, 'Lith_LoggedBy', 'Петров' ),
  ( 'hr-1', 150, 200, 'Lith_LoggedBy', 'Петров' ),
  ( 'hr-1', 200, 250, 'Lith_LoggedBy', 'Сидоров' ),
  ( 'hr-1', 250, 300, 'Lith_LoggedBy', 'Сидоров' )
;
WITH
t0 AS (
  SELECT 
    [holeid],
    [from],
    [to],
    [name],
    [value],
    [gn] = ROW_NUMBER() OVER ( PARTITION BY [holeid], [name] ORDER BY [to] )
         - ROW_NUMBER() OVER ( PARTITION BY [holeid], [name], [value] ORDER BY [to] )
  FROM
    @t
)
SELECT
  [holeid],
  [name],
  [value],
  [from] = MIN( [from] ),
  [to] = MAX( [to] )
FROM
  t0
GROUP BY
  [holeid],
  [name],
  [value],
  [gn]
ORDER BY
  [holeid],
  [name],
  [from]
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589224
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рукалоб. Тут уже три страницы ответов. *Ушел за кофе*.
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589225
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамирович,

21129672
...
Рейтинг: 0 / 0
Правильно указать min и max
    #39589226
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKРуслан Дамирович,
21129672
Да-да-да. Пинать меня ссаными тряпками до полного пробуждения.
...
Рейтинг: 0 / 0
22 сообщений из 72, страница 3 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Правильно указать min и max
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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