Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3963 |
Можно ли как-то хитро выбрать максимум, чтобы не делать второй запрос в таком случае? Процедура должна вернуть список, начиная с некоторого значения и затем максимальный 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] Ответить | Цитировать Сообщить модератору |
MasterZiv Member Откуда: Питер Сообщений: 34657 |
Ролг Хупин, так сохрани его в переменную из первого запроса, и используй во втором. переменная будет разная в зависимости от того, где это реализуется, на клиенте будет клиентская, на сервере северная (transact SQL) |
29 июн 16, 11:42 [19349134] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3963 |
Это процедура, оба запроса идут подряд, как написано, в первой выборке результат - множество, упорядоченное, и надо максимальный ид из него |
||
29 июн 16, 11:58 [19349230] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
|
||
29 июн 16, 12:08 [19349284] Ответить | Цитировать Сообщить модератору |
vborets Member Откуда: Сообщений: 166 |
Так если ты уже сортируешь список ( по убыванию) то и бери только первую строку т.е. максимум. |
29 июн 16, 15:12 [19350408] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Правда, зачем это всё - напонятно. |
||
29 июн 16, 15:22 [19350456] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3963 |
именно так и надо, то есть процедура должна вернуть клиенту рекордсет начиная с некоторого @start_id, затем запомнить последний выбранный (максимум) start_id в другой таблице, чтобы при следующем вызове начать с него start_id>@start_id |
||||
29 июн 16, 17:11 [19351122] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
так что ли нужно?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 | ![]() |