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

Откуда: Амурская область, г. Благовещенск
Сообщений: 2
Всем добрый день! Обращаюсь за помощью. Можно сказать, в SQL я пока абсолютный ноль, мелочи всякие делаю в Access через конструктор. Но такая задачка мне не по плечу)
Есть таблица из 3-столбцов: ID счета, остаток на счете и Дата. Таблица сама по себе значительная (несколько сотен тысяч строк) и представляет из себя ведомость наличия ненулевых остатков на счетах просроченной задолженности в разрезе счетов (ID), которых тоже достаточно много (в приложенном файле приведена выдержка):

Мне необходимо добавить поле ("кол-во дней на просрочке"), в котором бы рассчитывалось кол-во дней на НЕПРЕРЫВНОЙ просрочке нарастающим итогом в РАЗРЕЗЕ счетов (ID), т.е. счетчик начинался бы с "1" и нарастал на 1 до тех пор пока не появлялся временной разрыв более, чем в один день между текущей записью и предыдущей. В этом случае счетчик опять должен сбрасываться на "1" и т.д.

Буду очень благодарен за помощь!

К сообщению приложен файл (Таблица.xlsx - 9Kb) cкачать
13 июн 17, 06:32    [20559291]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет кол-ва дней нарастающим итогом  [new]
aleks2
Guest
Если ты слегка напряжешь отсутствующий мозг, то

1. Нахера фсякие "умные" слова? "дней нарастающим итогом " - то за бред?
2. Найди интервалы непрерывности. Кстати, интервал непрерывности заканчивается/начинается там, где разрыв.
3. row_number() по интервалу.
13 июн 17, 06:53    [20559301]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет кол-ва дней нарастающим итогом  [new]
Dmitrok
Member

Откуда: Амурская область, г. Благовещенск
Сообщений: 2
Напрячь отсутствующий мозг сложно... За совет спасибо, но достаточно было остановиться на п.2 и п.3 без 1-го и предисловия. Удачи!
13 июн 17, 07:56    [20559334]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет кол-ва дней нарастающим итогом  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
DECLARE @temp TABLE (
  [acct] VARCHAR(1),
  [date] DATE,
  [balance] MONEY )
;
INSERT
INTO
  @temp
VALUES
  ( 'A', '20170101', 1.00 ),
  ( 'A', '20170102', 1.00 ),
  ( 'A', '20170103', 1.00 ),
  ( 'A', '20170104', 2.00 ),
  ( 'A', '20170105', 1.00 ),
  ( 'A', '20170106', 0.00 ),
  ( 'A', '20170201', 1.00 ),
  ( 'A', '20170202', 1.00 ),
  ( 'A', '20170203', 1.00 ),
  ( 'A', '20170204', 2.00 ),
  ( 'A', '20170205', 1.00 ),
  ( 'A', '20170206', 0.00 )
;
WITH
t0 AS (
  SELECT
    [acct],
    [date],
    [balance],
    [gr] = ROW_NUMBER() OVER ( PARTITION BY [acct] ORDER BY [date] ) - ROW_NUMBER() OVER ( PARTITION BY [acct], CASE WHEN [balance] > 0 THEN 1 ELSE 0 END ORDER BY [date] )
  FROM
    @temp
)
SELECT
  [acct],
  [date],
  [rn] = CASE WHEN [balance] > 0 THEN ROW_NUMBER() OVER ( PARTITION BY [acct], [gr] ORDER BY [date] ) ELSE 0 END
FROM
  t0
ORDER BY
  [acct],
  [date]
;
13 июн 17, 12:00    [20559931]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить