Список ORDER BY оконной рамки RANGE имеет общий размер 1020 байт. Максимально поддерживаемый размер равен 900 байт. Как исполнить запрос?
На этот запрос
select death.location, death.continent, death.date, death.population, vacs.new_vaccinations , SUM(CONVERT(int,vacs.new_vaccinations)) OVER (Partition by death.Location Order by death.location, death.Date) as RollingPeopleVaccinated --, (RollingPeopleVaccinated/population)*100 from PortfolioCovid.dbo.Deaths death Join PortfolioCovid.dbo.Vaccinations vacs on death.location = vacs.location and death.date = vacs.date where death.continent is not null |
select death.location, death.continent, death.date, death.population, vacs.new_vaccinations , SUM(CONVERT(int,vacs.new_vaccinations)) OVER (Partition by death.Location Order by death.location, death.Date) as RollingPeopleVaccinated --, (RollingPeopleVaccinated/population)*100 from PortfolioCovid.dbo.Deaths death Join PortfolioCovid.dbo.Vaccinations vacs on death.location = vacs.location and death.date = vacs.date where death.continent is not null
Microsoft SQL server говорит
Список ORDER BY оконной рамки RANGE имеет общий размер 1020 байт. Максимально поддерживаемый размер равен 900 байт. |
Список ORDER BY оконной рамки RANGE имеет общий размер 1020 байт. Максимально поддерживаемый размер равен 900 байт.
Как "расширить" размер до необходимо размера, чтобы запрос выполнился?
Дополнительно:
А за каким хреном сортировка по death.location в группе по death.location? поверь на слово, во всей группе в этом поле одно и то же значение...
убрал order by и запрос исполнился
я ещё новичок и могу сам себе усложнять жизнь
убрал order by и запрос исполнился
А вот это зря... ORDER BY death.Date надо было оставить. А то он же ж тебе может посчитать накопление с отфонарным порядком дат.
я наконец-то исправил этот запрос
спасибо за помощь!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для решения данной проблемы с оконными функциями в SQL, где список ORDER BY оконной рамки RANGE имеет общий размер 1020 байт, а максимально поддерживаемый размер равен 900 байт, можно воспользоваться следующим подходом.
Один из способов уменьшить размер списка ORDER BY в оконной функции - это использовать подзапросы для определения порядка сортировки. Например, вместо того чтобы непосредственно указывать все поля ORDER BY в оконной функции, вы можете создать подзапрос, который сначала сортирует данные и затем применяет оконную функцию к отсортированным данным.
Вот пример использования подзапроса для решения данной проблемы:
WITH sorted_data AS ( SELECT id, value, ROW_NUMBER() OVER (ORDER BY field1, field2) AS rn FROM your_table ) SELECT id, value, SUM(value) OVER (ORDER BY rn RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_total FROM sorted_data;
В этом примере мы создаем общий таблицу `sorted_data`, которая сначала сортирует данные по полям `field1` и `field2`, присваивает каждой строке номер строки `rn`, а затем применяет оконную функцию `SUM` к отсортированным данным, используя номер строки `rn` в качестве порядка сортировки.
Таким образом, вы можете избежать проблемы с превышением максимального размера списка ORDER BY в оконной функции, используя подзапросы для определения порядка сортировки данных. Надеюсь, это поможет вам решить вашу проблему!