![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 23.10.2009
Сообщений: 12
|
![]()
Доброго времени суток, уважаемые форумчане
![]() Дана таблица Test CREATE TABLE Test ( ID INT IDENTITY(1,1) NOT NULL, Value INT NOT NULL ) Задача такая: определить первую запись, начиная с которой сумма итога по столбцу Value превысит 1000 Весь мозг сломала, наведите пожалуйста как реализовать запрос ![]() Решила вот таким образом, буду рада поправкам ![]() Код:
Последний раз редактировалось Stilet; 11.09.2013 в 17:19. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Ох и долго он будет работать для большой таблицы и больших значений оценочной константы. Если в лоб, то подправил бы так
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 23.10.2009
Сообщений: 12
|
![]()
Спасибо большое!
Первый вариант уже отбросила)...теперь мне нужно как то заменить функцию TOP, чтоб запрос работал на SQL 92 Код:
А как можно оптимизировать запрос для MSSQL 2008? Последний раз редактировалось Stilet; 11.09.2013 в 17:20. |
![]() |
![]() |
![]() |
#4 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
На самом деле тут нужно использовать аналитическую функцию и оконное выражение, -- что-то вроде rows between preceding and unbounded following. Боюсь, что для уровня вопрошающей это слишком круто, а мне сегодня думать лень.
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 23.10.2009
Сообщений: 12
|
![]()
Vapaamies, спасибо за ответ
![]() Главное условие моего задания - "Задача решается без курсоров, на чистом SQL-92" А ваше решение больше подходит для оракл и sql 92 не поддерживает указанные функии. Вторым пунктом мне нужно написать этот же запрос для MSSQL более оптимальным способом. Последний раз редактировалось mulatoschka1990; 11.09.2013 в 00:03. |
![]() |
![]() |
![]() |
#6 | |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]() Цитата:
![]() Не уверен, правда, что аналитические функции входят именно в стандарт SQL-92, но поддерживаются несколькими СУБД -- это точно. И решают задачу без курсора и алгоритмики, -- это тоже не вызывает сомнений. И на практике применяются. Ваш К. О. ![]()
В разработке: воспроизводственный контур ИТ
|
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 23.10.2009
Сообщений: 12
|
![]()
Vapaamies, описание предложения OVER по вашей ссылке для MSSQL 2012.
Там моя задача решалась бы так? Код:
Для SQL 92 вот такой запрос: Код:
Для mssql 2008 2 варианта: 1. Код:
Код:
![]() Я очень буду рада критике и наставлениям)))))) |
![]() |
![]() |
![]() |
#8 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
И правильно, ибо использовать distinct вместе с аналитической функцией -- маразм.
Если MS SQL 2008 не поддерживает конструкцию rows between -- то самое оконное выражение, посоветовать что-то другое не могу. Я вообще не спец по MS SQL. ![]()
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
нарастающий итог с учетом фактического результата | zemlyanukhina | Microsoft Office Excel | 2 | 22.02.2011 09:16 |
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) | Машуля | SQL, базы данных | 4 | 06.05.2010 21:09 |
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi | S_Yevgeniy | Помощь студентам | 1 | 27.10.2009 06:26 |
SQL запрос на основе другого SQL запрса... | Timoxa | БД в Delphi | 1 | 07.01.2007 18:15 |
нарастающий итог | SerGo | БД в Delphi | 1 | 10.11.2006 10:08 |