Автор Тема: Продолжаем тему правильных циклов (реальная задача из  (Прочитано 7809 раз)

albobin

  • Full Member
  • ***
  • Сообщений: 198
    • Просмотр профиля
Примерно так:
оформлен код как процедура 'babki'
src  -  ref на исходный массив 
dst  - ref на результирующий массив
date0 - первый день года
все даты в примере  во внутренней форме (номер дня  с определённой  даты 19 века :)
babki(src,dst,date0)
  N (src,dst,date0)
  S s="|"
  S i=$o(@src@(""))
  F  S i=$o(@src@(i))  Q:i=""   S t=@src@(i)  D
  . S chel=$p(t,s,1),babki=$p(t,s,2),from=$p(t,s,3),to=$p(t,s,4)
  . S $e(@dst@(chel,babki),from-date0+1,to-date0+1)=$tr($j("",to-from+1)," ","1")
  S (chel,babki)=""
  F  S chel=$o(@dst@(chel))  Q:chel=""  D
  .  F  S babki=$o(@dst@(chel,babki))  Q:babki=""    S @dst@(chel,babki)=$l(@dst@(chel,babki),"1")-1
  Q


DIzer

  • Гость
Но это не решение поставленной задачи.
Нужно считать дни в периодах.
:) точно , а так?
SELECT Sotr, Nach, max(Data_Fin-Data_Nach) FROM TABLE
GROUP BY Sotr, Nach
ORDER BY Sotr, Nach

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
И так не так :)

Что будет в результате, если два периода (по данному сотр. и нач.) не пересекаются?

DIzer

  • Гость
 :) :) :)  тогда самым простым будет банальное создание псевдо набора (представления)
SELECT Sotr, Nach, Data_Nach, Data_Fin FROM TABLE
ORDER BY Sotr, Nach, Data_Nach
и цикл по этому набору в хранимой процедуре...
с чего начали тем и закончили  ;D

albobin

  • Full Member
  • ***
  • Сообщений: 198
    • Просмотр профиля
Исправить сразу 4 строку не успел, время вышло.
babki(src,dst,date0)
  N (src,dst,date0)
  S s="|"
  S i=""
  F  S i=$o(@src@(i))  Q:i=""   S t=@src@(i)  D
  . S chel=$p(t,s,1),babki=$p(t,s,2),from=$p(t,s,3),to=$p(t,s,4)
  . S $e(@dst@(chel,babki),from-date0+1,to-date0+1)=$tr($j("",to-from+1)," ","1")
  S (chel,babki)=""
  F  S chel=$o(@dst@(chel))  Q:chel=""  D
  .  F  S babki=$o(@dst@(chel,babki))  Q:babki=""    S @dst@(chel,babki)=$l(@dst@(chel,babki),"1")-1
  Q