И вновь продолжу тему запросов...
В скриншотах результаты исполнения одного и того же запроса в TSAdmin и в MS SQL Studio
Разница в общем видна - простой цифрой 1 в select для получения самой поздней по времени записи не обойтись
Из администратора
А вот студия
Я конечно в обход напишу, или из датасета первую запись после сортировки возьму, или вообще хранимку сделаю - но как-то некрасиво
Сервис в аттаче, если что...
А можно вопрос по самому запросу. Просто интересно
Запрос у вас какой-то хитрый. Group By по первичному ключу ничего не сделает, т.е. вы получите результат как и без Group by.
Или это просто пример такой?
Александр, хочу уточнить: не выполнение
"Александр Кудряшов" написал:запроса в TSAdmin
а предпросмотр запроса в TSAdmin. Выполнение SelectQuery.Open() в скриптах Terrasoft при установленном TOP 1 вернёт одну запись. Поэтому некрасиво, но на реальный результат не влияет.
"Евгений Либин" написал:Group By по первичному ключу ничего не сделает
Евгений, если в сервисе запроса используются агрегатные функции, автоматически устанавливается группировка по остальным полям.
Так даты отсортированы в обратном порядке, и потребности в MAX нет.
"Евгений Либин" написал:Запрос у вас какой-то хитрый. Group By по первичному ключу ничего не сделает, т.е. вы получите результат как и без Group by.
Или это просто пример такой?
Это сгенерил TSAdmin, я б такое не придумал:wink:
"Евгений Либин" написал:Так даты отсортированы в обратном порядке, и потребности в MAX нет.
Вы правы, нет потребности, погорячился, перестраховался. Минус один мне:sad:
"Лабьяк Олег Игоревич" написал:Выполнение SelectQuery.Open() в скриптах Terrasoft при установленном TOP 1 вернёт одну запись. Поэтому некрасиво, но на реальный результат не влияет.
Не соглашусь. Я тоже так думал:)
var Query = Services.GetNewItemByUSI('sq_ActInDocument'); var Dataset = Query.Open();
Результат виден здесь
Поэтому верно будет только в случае создания нового сервиса Dataset на основании данного запроса и обращении именно к нему Dataset.Open() - тогда все замечательно, одна запись.
"Александр Кудряшов" написал:Вы правы, нет потребности, погорячился, перестраховался. Минус один мне
Я сам, когда заработаюсь так что глаза из орбит лезут, такого накручу... что на утро приходится всё "оптимизировать":lol:
"Александр Кудряшов" написал:Не соглашусь. Я тоже так думал:)
По поводу RecordsCount - оно посчиталось в результате запроса вида select count() .. и ваши условия.
При чем вероятней всего оно считается как раз на get методе этого свойства.
PageRecordsCount - у вас как раз 1. То есть все так как сказал Олег.
Просто видимо TOP 1, при формирования запроса, вставляется толи в последнюю очередь то ли ..
А нет.. у вас по 1 записи на страницу и страниц 13 как и RecordsCount. Значит что-то не так, да..
"Доленко Юрий" написал:А нет.. у вас по 1 записи на страницу и страниц 13 как и RecordsCount. Значит что-то не так, да..
Вот и я когда экземпляр датасета в скрипте получил, удивился:)
Сервис датасет, подчеркну, работает как надо - только не всегда хочется им пользоваться...
[update] Разобрался.
Интересный момент - профайлер показывает абсолютно идентичный запрос! И при Dataset.Open() и при Query.Open() идет такой запрос
SELECT TOP 1 [tbl_Document].[ID] AS [ID], CAST(CONVERT(VARCHAR(8), [tbl_Document].[Date], 112) AS DATETIME) AS [Date] FROM [dbo].[tbl_Document] AS [tbl_Document] ORDER BY 2 DESC
Но в случае query запись возвращается в получаемый датасет одна и та же, но столько раз, сколько их всего (как при select .... без TOP 1 - получается dataset c несколькими одинаковыми записями) а при query - одна:smile:
Так что в общем все работает, получается, но нужно при написании кода учитывать этот нюанс.
А вы явно не указывали FetchRecordsCount = 1 ?
Если нет, то попахивает костылем в ядре )
"Доленко Юрий" написал:А вы явно не указывали FetchRecordsCount = 1 ?
Если нет, то попахивает костылем в ядре )
Не пробовал... долго писал апдейт к прошлому своему же комментарию - нашел решение:smile:
Кстати, к Администратору - а не надо ли нам опцию сделать такую, что нельзя редактировать свой комментарий если на него уже ответили? сейчас идею заведу
"Доленко Юрий" написал:А вы явно не указывали FetchRecordsCount = 1 ?
Думаю, не особо поможет. Поскольку
"Александр Кудряшов" написал:Сервис датасет, подчеркну, работает как надо - только не всегда хочется им пользоваться...
а для SelectQuery нет возможности установить значение свойству FetchRecordsCount по причине его отсутствия. Когда же выполнится var Dataset = SelectQuery.Open(), изменять это свойство уже поздно.