Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как выбрать MAX() в таком случае?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4473
Можно ли как-то хитро выбрать максимум, чтобы не делать второй запрос в таком случае?
Процедура должна вернуть список, начиная с некоторого значения и затем максимальный start_id из возвращенного списка вписать в другую таблицу, чтобы при следующем вызове чтитаь, начиная с него и т.д.:

select action_id,data from [dbo].[list] where start_id>@start_id
order by start_id

update [dbo].[clients_list] set start_id=
(select isnull(max(start_id),0) from [dbo].[list])  -- можно ли избежать этого подзапроса?
where client_id=@client_id;


Вопрос: по сути то мы уже выбрали тот максимальный start_id, который нужен.
29 июн 16, 11:01    [19348887]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать MAX() в таком случае?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709
Ролг Хупин,
так сохрани его в переменную из первого запроса, и используй во втором.

переменная будет разная в зависимости от того, где это реализуется, на клиенте будет клиентская, на сервере северная (transact SQL)
29 июн 16, 11:42    [19349134]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать MAX() в таком случае?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4473
MasterZiv
Ролг Хупин,
так сохрани его в переменную из первого запроса, и используй во втором.

переменная будет разная в зависимости от того, где это реализуется, на клиенте будет клиентская, на сервере северная (transact SQL)


Это процедура, оба запроса идут подряд, как написано, в первой выборке результат - множество, упорядоченное, и надо максимальный ид из него
29 июн 16, 11:58    [19349230]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать MAX() в таком случае?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5146
Ролг Хупин
в первой выборке результат - множество, упорядоченное, и надо максимальный ид из него
сохранить во временную табл, не?
29 июн 16, 12:08    [19349284]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать MAX() в таком случае?  [new]
vborets
Member

Откуда:
Сообщений: 166
Так если ты уже сортируешь список ( по убыванию) то и бери только первую строку т.е. максимум.
29 июн 16, 15:12    [19350408]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать MAX() в таком случае?  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
vborets
Так если ты уже сортируешь список ( по убыванию) то и бери только первую строку т.е. максимум.
Ему надо взять все, а максимумом проапдейтить другую таблицу, если я правильно понял.
Правда, зачем это всё - напонятно.
29 июн 16, 15:22    [19350456]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать MAX() в таком случае?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4473
iap
vborets
Так если ты уже сортируешь список ( по убыванию) то и бери только первую строку т.е. максимум.
Ему надо взять все, а максимумом проапдейтить другую таблицу, если я правильно понял.
Правда, зачем это всё - напонятно.


именно так и надо, то есть процедура должна вернуть клиенту рекордсет начиная с некоторого @start_id, затем запомнить последний выбранный (максимум) start_id в другой таблице, чтобы при следующем вызове начать с него start_id>@start_id
29 июн 16, 17:11    [19351122]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать MAX() в таком случае?  [new]
Konst_One
Member

Откуда:
Сообщений: 11680
так что ли нужно?

declare @t table (action_id int,data varchar(255),start_id int)
declare @maxstartid int

insert into @t (action_id,data, start_id)
select action_id,data, start_id from [dbo].[list] where start_id>@start_id

select action_id,data
FROM @t
order by start_id

set @maxstartid =  (select top (1) start_id from @t order by start_id desc);

update [dbo].[clients_list] set start_id=@maxstartid 
where client_id=@client_id;
29 июн 16, 17:22    [19351173]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить