SQL-CUMULATIVE datetime / datead - PullRequest
       1

SQL-CUMULATIVE datetime / datead

0 голосов
/ 25 июня 2019

Я хочу иметь дату выполнения с определенными строками из столбца num, и datead по минутам в столбце mins, и приращение +1 для идентификатора строки.

Текущий код

declare @table table
(
  ID varchar(10), 
  DT datetime, 
  mins int,
  num int
)

insert into @table
  select 'PR0006',getdate(), 30, 3

select * from @table

выход

ID      DT                      mins    num     
PR0006  2019-06-25 08:45:56.227 30  3

Желаемый вывод

PR0006  2019-06-25 08:45:56.227 30  3
PR0007  2019-06-25 09:15:56.227 30  3
PR0008  2019-06-25 09:45:56.227 30  3

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

Вы можете сделать это с помощью рекурсивного CTE:

with params as (
      select 30 as minutes, 3 as num
     ),
     n as (
      select 1 as n
      union all
      select n + 1
      from n join
           params
           on n.n < params.num
     )
insert into @table
  select 'PR' + FORMAT(5 + n, '0000'),
         dateadd(minute, (n.n - 1) * params.minutes, getdate()),
         params.minutes, params.num
  from n cross join
       params

Здесь - это скрипта db <>.

0 голосов
/ 25 июня 2019

Один из способов сделать это - создать другую таблицу и вставить пустые строки, основанные на вашей строке num, а затем перекрестно соединиться с ней .. что-то вроде этого

      DECLARE   @Numbers TABLE
      ( 
             Number INT IDENTITY(1,1) PRIMARY KEY CLUSTERED 
      ) 



declare @table_test table
(
  ID varchar(10), 
  DT datetime, 
  mins int,
  num int
)

insert into @table_test
  select 'PR0006',getdate(), 30, 3

--select * from @table_test

  WHILE COALESCE(SCOPE_IDENTITY(), 0) < (select num from @table_test)
      BEGIN 
             INSERT @Numbers DEFAULT VALUES 
      END   
      ;with mycte as (
      SELECT  
      Number
      , ID
      , DT
      ,mins
      ,num
      ,sum(mins) over( order by DT  ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)  as running_mins
       FROM @Numbers
      cross join @table_test
      )

      Select *
      , dateadd(MINUTE,running_mins-mins,DT)as New_DT 
      from mycte

теперь вам просто нужно выяснить, как увеличить ID на основе столбца Number ..

Не ясно, является ли PR всегда префиксом или сколько чисел следует за PR ... но вы должны быть в состоянии понять это.

но вот ссылка, которая показывает вам, как:

Инкремент varchar в SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...