[SQL Server]Сгенерировать последовательность
От: InCodeWeTrust  
Дата: 21.08.18 16:24
Оценка:
Есть таблица с полей b_datetime(datetime).
Данные пишутся с точностью до секунды, но есть промежутки в одну и более секунд:

1900-01-01 16:20:00
1900-01-01 16:20:01
1900-01-01 16:20:02
1900-01-01 16:20:05
1900-01-01 16:20:09

Возможно ли сгенерировать(выбрать) в одном селекте (без создания [DDL] доп таблиц и обращения к системным таблицам и использования функций, процедур)
с произвольного момента без использования СТЕ непрерывную посекундную последовательность длительностью к примеру 30 секунд:

1900-01-01 16:20:00
1900-01-01 16:20:01
1900-01-01 16:20:02
1900-01-01 16:20:03
1900-01-01 16:20:04
1900-01-01 16:20:05
1900-01-01 16:20:06
1900-01-01 16:20:07
.
.
.
1900-01-01 16:20:30
Отредактировано 21.08.2018 18:02 ГАИ . Предыдущая версия . Еще …
Отредактировано 21.08.2018 18:00 ГАИ . Предыдущая версия .
Отредактировано 21.08.2018 16:26 ГАИ . Предыдущая версия .
Re: Сгенерировать последовательность
От: Джеффри  
Дата: 21.08.18 17:20
Оценка: 2 (1)
Здравствуйте, InCodeWeTrust, Вы писали:

ICW>Возможно ли сгенерировать(выбрать) с поизвольного момента без использования СТЕ непрерывную посекундную последовательность длительностью к примеру 30 секунд:


СУБД — SQL Server, нужно полагать?

Я бы сказал, что здесь ключевое сгенерировать последовательность чисел 1..N, а потом ее можно легко сконвертировать в дату-время через DATEADD(SECOND, ...)

Вариантов как сгенерировать последовательность чисел без CTE — много.

Можно, например, просто создать фиксированную таблицу Numbers с последовательность чисел, а потом ее использовать вроде:

SELECT
    DATEADD(SECOND, N.Num, YT.b_datetime)
FROM
    dbo.YourTable YT
INNER JOIN
    dbo.Numbers N ON N.Num BETWEEN 1 AND 30
WHERE
    YT.b_datetime = ?
ORDER BY
    1


Можно сделать table функцию, которая будет возравщать такую последовательность:

CREATE FUNCTION dbo.fn_NumbersSequence(@Start INT, @End INT)
RETURNS TABLE 
RETURN 
SELECT
    ones.n + 10 * tens.n AS Num
FROM
    (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) ones(n),
    (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) tens(n)
WHERE
    ones.n + 10*tens.n BETWEEN @Start AND @End
GO


SELECT
    DATEADD(SECOND, F.Num, YT.b_datetime)
FROM
    dbo.YourTable YT
CROSS APPLY
    dbo.fn_NumbersSequence(1, 30) F
WHERE
    YT.b_datetime = ?
ORDER BY
    1


Может в новых версиях SQL Server есть уже специальные ф-ции для этого.
Re: [SQL Server]Сгенерировать последовательность
От: Lepsik Индия figvam.ca
Дата: 27.08.18 13:31
Оценка:
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-sequence-transact-sql?view=sql-server-2017
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.