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

Откуда:
Сообщений: 35
Возможно это глупый вопрос - но что значит такая сортировка - order by current_timestamp - у меня такого столбца в таблице нет.
15 апр 15, 15:47    [17519168]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
https://msdn.microsoft.com/ru-ru/library/ms188751.aspx

Эта функция ANSI SQL эквивалентна функции GETDATE.
15 апр 15, 15:48    [17519177]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Павел Евгеньевич
Member

Откуда:
Сообщений: 35
а какой у нее смысл в сортировке, не понимаю
15 апр 15, 17:21    [17519798]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
запрос покажите, где у вас это используется
15 апр 15, 17:23    [17519811]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Павел Евгеньевич
Member

Откуда:
Сообщений: 35
вот кусок из запроса

SELECT this_.CATEGORYID as CATEGORYID1_0_,              
                   this_.C_NAME as C4_1_0_,             
                   ROW_NUMBER() OVER(ORDER BY CURRENT_TIMESTAMP) as __hibernate_sort_row
        FROM   CATEGORIES this_
15 апр 15, 17:45    [17519914]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
для нумерации во временном порядке
15 апр 15, 17:46    [17519922]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20609
Надо выяснять, какое время возвращает функция - время начала обработки запроса или время запроса функции для обрабатываемой записи (Microsoft об этом скромно умалчивает). Если второе - то такой запрос даст статистику по динамике обработки данных в запросе. Если первое - запрос вообще ниачём.
15 апр 15, 17:48    [17519930]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> для нумерации во временном порядке

в произвольном.
обычно пишут row_number () over (order by (select null)), но и так то же самое получится.
15 апр 15, 18:05    [17520026]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Павел Евгеньевич
Member

Откуда:
Сообщений: 35
т.е в принципе каждый такой запрос будет возвращать каждый раз неупорядоченные записи?
15 апр 15, 18:12    [17520053]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Павел Евгеньевич
т.е в принципе каждый такой запрос будет возвращать каждый раз неупорядоченные записи?
Да.

Так делают, если порядок неважен, это достаточно часто нужно.
Akina
Надо выяснять, какое время возвращает функция - время начала обработки запроса или время запроса функции для обрабатываемой записи (Microsoft об этом скромно умалчивает). Если второе - то такой запрос даст статистику по динамике обработки данных в запросе. Если первое - запрос вообще ниачём.
Функция вызовется один раз для всего запроса.
15 апр 15, 18:15    [17520064]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
o-o
Guest
Akina
Надо выяснять, какое время возвращает функция - время начала обработки запроса

не надо выяснять.
это такой способ обойти синтаксис, когда неважен порядок нумерации.
если написать ROW_NUMBER() over(), то вылезет:
Msg 4112, Level 15, State 1, Line 1
The ranking function "ROW_NUMBER" must have an ORDER BY clause.

а если ROW_NUMBER() over(order by 1):
Msg 5308, Level 16, State 1, Line 1
Windowed functions do not support integer indices as ORDER BY clause expressions.

ROW_NUMBER() over(order by null):
Msg 5309, Level 16, State 1, Line 1
Windowed functions do not support constants as ORDER BY clause expressions.

зато катят варианты типа
ROW_NUMBER() over(order by (select 1))
ROW_NUMBER() over(order by getdate())
15 апр 15, 18:18    [17520087]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Павел Евгеньевич
Member

Откуда:
Сообщений: 35
в том-то и дело что порядок нумерации важен как я понимаю - этот код генерирует Hibernate при пейджинации:

SELECT TOP (100 /* @p0 */) CATEGORYID1_0_,
                 C4_1_0_              
FROM   (SELECT this_.CATEGORYID                              as CATEGORYID1_0_,
               this_.C_NAME                                  as C4_1_0_,
               ROW_NUMBER() OVER(ORDER BY CURRENT_TIMESTAMP) as __hibernate_sort_row
        FROM   CATEGORIES this_) as query
WHERE  query.__hibernate_sort_row > 2 /* @p1 */
ORDER  BY query.__hibernate_sort_row;


Т.е порядок не важен в полученном куске, но в глобальном смысле он важен.
15 апр 15, 18:25    [17520121]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20609
alexeyvg
Функция вызовется один раз для всего запроса.
Можно узнать, на чём базируется такая уверенность? я бы как раз предположил с точностью до наоборот, потому как функция недетерминированная.
15 апр 15, 18:47    [17520214]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
Akina
alexeyvg
Функция вызовется один раз для всего запроса.
Можно узнать, на чём базируется такая уверенность? я бы как раз предположил с точностью до наоборот, потому как функция недетерминированная.


в данном случае она вообще игнорируется.
15 апр 15, 18:55    [17520250]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Akina
Можно узнать, на чём базируется такая уверенность? я бы как раз предположил с точностью до наоборот, потому как функция недетерминированная.

Conor vs. Runtime Constant Functions
15 апр 15, 18:57    [17520254]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
Akina
Можно узнать, на чём базируется такая уверенность? я бы как раз предположил с точностью до наоборот, потому как функция недетерминированная.
Itzik Ben-Gan "Inside Microsoft SQL Server 2008: T-SQL Programming"
When you invoke nondeterministic built-in
functions in a query (such as RAND and GETDATE), those functions are invoked once for the
whole query and not once per row . The only exception to this rule is the NEWID function,
which generates a globally unique identifier (GUID) . NEWID is the only nondeterministic
built-in function that will be invoked once per row .
15 апр 15, 19:16    [17520325]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20609
Если верить официальной документации, не всё так однозначно. Правда, я не нашёл сведений по данному вопросу для встроенных функций, а для пользовательских пишется, что
https://msdn.microsoft.com/ru-ru/library/ms191007.aspx
The number of times that a function specified in a query is actually executed can vary between execution plans built by the optimizer.
Жаль, в MS SQL нет синтаксической конструкции, позволяющей выполнить задержку во время выполнения запроса...
15 апр 15, 20:41    [17520630]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
Akina
Правда, я не нашёл сведений по данному вопросу для встроенных функций
Так речь-то идет как раз о встроенных. С пользовательскими все и так понятно.
Akina
Жаль, в MS SQL нет синтаксической конструкции, позволяющей выполнить задержку во время выполнения запроса...
Можно и без хитрых синтаксических конструкций:
use tempdb;
go

create function dbo.fnDelay
(
 @Count int
)
returns bit
as
begin
 while @Count > 0
  set @Count -= 1;

 return 1;
end;
go

declare @t table (id int);
insert into @t values (1), (2), (3);

set statistics time on;
select id, getdate() from @t where dbo.fnDelay(10000000) = 1;
set statistics time off;
go

drop function dbo.fnDelay;
go
15 апр 15, 20:56    [17520671]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
invm,

А чем waitfor delay не устроила?
15 апр 15, 21:07    [17520694]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
SomewhereSomehow
А чем waitfor delay не устроила?
Ну так Akina, насколько я понял, хочет задержку для каждой обрабатываемой строки строки...

Ну и более правильный вариант:
use tempdb;
go

create function dbo.fnDelay
(
 @Count int
)
returns bit
as
begin
 while @Count > 0
  set @Count -= 1;

 return 1;
end;
go

declare @t table (id int);
insert into @t values (1), (2), (3);

set statistics time on;
select id, getdate() from @t where dbo.fnDelay(1000000 + 2 * id - id - id) = 1;
set statistics time off;
go

drop function dbo.fnDelay;
go
15 апр 15, 21:11    [17520710]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
invm,

Ааа, ну жесть конечно. Убедиться надо, я не понял, ну пусть тогда =)
15 апр 15, 21:16    [17520726]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Павел Евгеньевич
Member

Откуда:
Сообщений: 35
и какой же будет правильный ответ?)
16 апр 15, 10:11    [17521806]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
o-o
Guest
ответ на что, важен ли вам порядок нумерации?
мы-то откуда знаем.
но ваш order by current_timestamp никакого порядка не задает,
ибо
daw
Akina
alexeyvg
Функция вызовется один раз для всего запроса.

Можно узнать, на чём базируется такая уверенность? я бы как раз предположил с точностью до наоборот, потому как функция недетерминированная.

в данном случае она вообще игнорируется.
16 апр 15, 10:34    [17521923]     Ответить | Цитировать Сообщить модератору
 Re: order by current_timestamp  [new]
Павел Евгеньевич
Member

Откуда:
Сообщений: 35
спасибо за ответ, очень интересное обсуждение
16 апр 15, 10:40    [17521959]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить