Считать дни подряд во время вставки - PullRequest
0 голосов
/ 04 марта 2020

У меня есть 2 таблицы следующим образом:

Table Equipment   (EquipID,RentType)
Table EquipmentTimesheet  (EquipID (FK),Date)

Идея заключается в том, чтобы вставить новые строки в таблицу " EquipmentTimesheet ". Мне нужно сосчитать, если предыдущие 17 дней были последовательными, а затем изменить значение столбца « RentType » в таблице «Оборудование» .

Я пробовал несколько решений, не имеющих способа, таких как:

SELECT 
    ROW_NUMBER() OVER( PARTITION BY GRP  ORDER BY Date) AS R, Date
FROM
(
SELECT 
    Date, DATEDIFF(Day, '1900-01-01' , Date)- ROW_NUMBER() OVER( ORDER BY Date ) AS GRP
FROM EquipmentTimeSheet WHERE EquipID = 29 ) A

Это то, что я получаю

Results

Как мне изменить приведенный выше код для достижения цели, о которой я упоминал в своем вопросе?

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Эта проблема эквивалентна проблеме "пробелов и островков" и может быть решена с помощью следующего запроса:

declare @tbl table(dt date)
insert into @tbl values
('2020-02-01'),
('2020-02-02'),
('2020-02-03'),
('2020-02-05'),
('2020-02-06'),
('2020-02-10'),
('2020-02-12'),
('2020-02-13'),
('2020-02-18');

select min(dt) StartDate,
       count(*) ConsecutiveDays
from (
    select *, datepart(d, dt) - row_number() over (order by dt) grp
    from @tbl
) a group by grp
0 голосов
/ 04 марта 2020

Я думаю, вы могли бы сделать это так:

if (
 select count(*) from EquipmentTimesheet 
 where [Date] >= dateadd(d,-19,cast(getdate() as date)) 
 and EquipID = 29 
) = 19

update Equipment set RentType = 'whatever you need to update it to'

Это будет сделано, если дата, которую вы вставляете, сегодня. В противном случае измените третий аргумент в части dateadd

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