Раді Вас бачити! » Увійти » Створити новий профіль
361
21 жовтня 2015 01:55:15
тогда лучше писать все вообще, а потом анализировать уже при выдаче ответа, т.к. при получении уточненных данных то что что было ранее невалидным может стать валидным.

а 24*365*10 000=87 600 000 - если у вас сервер немного мощнее калькулятора - для субд это очень небольшая база. даже если нужен реалтайм.
це спрощений приклад...  на продакшені у нас кластер... і десятки мільярдів записів у існуючій табличці... тому хочеться вирішити це за допомогою простого селекту за допомогою аналітичних функцій... у нас індекс займає порядка пів терабайта... а це купа проходів гілок тільки одного індексу... в динаміці все що валідне на першій стадії селекту - може стати невалідним в наступному  порівнянні...
362
21 жовтня 2015 01:48:13
крім того , курсор не зможе проаналізувати ситуацію... коли наприклад в проміжок між двома існуючими записми падають 5 тимчасових... і на першій стадвї тільки 2 з них не відповідають умовам... це динаміка.. порівнювати треба з наступним  валідним тимчасовим.. а якщо він не відповідає умовам.. нема гарантіїї що попередній буде ок - до наступного.. і т.д.. в прикладі це описано...
363
21 жовтня 2015 01:43:53
нові записи можуть додаватись не по порядку... тобто вони можуть падати в проміжки між існуючими...
364
21 жовтня 2015 01:42:49
записи могут добавляться не по порядку? тогда бред какой-то в самой постановке, т.к. сначала ты отфильтровал записи, а потом добавляются новые строки, при которых предыдущие отфильтрованные и отброшенные были бы правильными?

а вообще - триггеры и курсоры спасут вас. и кода в 10 раз меньше будет.
курсори і тріггери сповільнюють дмл-і в даному випадку - коли записів  тимчасовій табличці буде порядку десятків тисяч...
лічильник може надсилати уточнюючі дані погодинно за рік.. а це 24*356 записів... а лічильників моде бути десятки тисяч...

табличка TEST_EXISTS - містить дані які не можна едітати.. і відповідно я можу тільки видаляти записи, які прийшли... тобто з таблички  TEST_LOAD...  Критерії консистентності нових записів описані вище...
існуючі записи не можна видаляти...
365
21 жовтня 2015 01:32:19
Полвторого ночи неудачное время для подобного
просто спокусився темою місс Фупу.. і згадав.. пароль)))
теоретично задачка не має вирішення - останнє питання з цитати... принаймі я не зміг нічо придумати.. .
366
21 жовтня 2015 01:17:43
Готовий на протязі півгодинки відповідати на уточнюючі запитання.. якщо що не зрозуміло... хоча надії мало...:(
367
21 жовтня 2015 01:00:09
задавав аналгічне питання на спеціалізованому рос. форумі... на жаль відповіді не отримав...
проблему  принципі вирішено... але можливо у когось будуть якісь думки...  було б цікаво почитати ідеї... не обов"язково технічно оформлені...
Вибачте. але копі-паст...  влом переписувати на укр.. перепрошую...



 Есть електрический счетчик к-во цыфр 2(максимальное значение 99.99)

есть 2 таблички:
список существующих показаний счетчика - test_exists
список новых показаний (для загрузки в существующую табличку) - test_load

скрипт:
-- dropping
drop table TEST_EXISTS;
drop table TEST_LOAD;
-- creation
CREATE TABLE TEST_EXISTS
(
  DATE_VAL DATE NOT NULL,
  VALUE    NUMBER NOT NULL,
   TYPE     VARCHAR2(100 CHAR),
   DIFF     NUMBER
);
CREATE TABLE TEST_LOAD
(
  DATE_VAL DATE NOT NULL,
  VALUE    NUMBER NOT NULL,
   TYPE     VARCHAR2(100 CHAR)
);
-- inserting into main table
INSERT INTO TEST_EXISTS(DATE_VAL, VALUE,TYPE,DIFF ) VALUES(to_date('01-01-2000','DD-MM-YYYY'),90,'Normal',0);
INSERT INTO TEST_EXISTS(DATE_VAL, VALUE,TYPE,DIFF ) VALUES(to_date('01-03-2000','DD-MM-YYYY'),20,'Overflow',20);
INSERT INTO TEST_EXISTS(DATE_VAL, VALUE,TYPE,DIFF ) VALUES(to_date('01-05-2000','DD-MM-YYYY'),95,'Rollback',-15);
-- inserting into temporary table
INSERT INTO TEST_LOAD(DATE_VAL, VALUE) VALUES(to_date('01-04-2000','DD-MM-YYYY'),10);
INSERT INTO TEST_LOAD(DATE_VAL, VALUE) VALUES(to_date('02-04-2000','DD-MM-YYYY'),50);
INSERT INTO TEST_LOAD(DATE_VAL, VALUE) VALUES(to_date('03-04-2000','DD-MM-YYYY'),70);
INSERT INTO TEST_LOAD(DATE_VAL, VALUE) VALUES(to_date('04-04-2000','DD-MM-YYYY'),40);
INSERT INTO TEST_LOAD(DATE_VAL, VALUE) VALUES(to_date('05-04-2000','DD-MM-YYYY'),55);
INSERT INTO TEST_LOAD(DATE_VAL, VALUE) VALUES(to_date('09-04-2000','DD-MM-YYYY'),30);
INSERT INTO TEST_LOAD(DATE_VAL, VALUE) VALUES(to_date('01-06-2000','DD-MM-YYYY'),44);


commit;


тип показания автоматически определяется сл. образом:

- если разница между текущим и предыдущим значением меньше 1/3 максимально возможного значения (100) или
- если разница между текущим и предыдущим значением больше 2/3 максимально возможного значения (100) - то
дополнительная логика (одно из (rollback, normal, overflow))


- если разница между текущим и предыдущим значением между 1/3 и 2/3 (33 и 66 в нашем случае) => ошибка, запись не должна инсертится.

Существующие записи в табличке test_exists удалятся не должны.


Проблема в том , что если между 2 существующими записями инсертится датасет из нескольких показаний,
то я не могу одним проходом найти все невалидные записи:

Запрос:
select
  z.is_exist,
  z.date_val,
   z.value,
   z.type,
  abs(value  -  lag(case when is_exist = 1 then value else null end ignore nulls )over( order by date_val )) as difference_prev_exi st,
  abs(value  -  lag(value) over(order by date_val)) as difference,
   case
     when
      abs(value  -  lag(value) over( order by date_val)) between 33 and 66 and is_exist = 0 then 'yes'
     when
        lead(z.type) over (order by z.date_val) = 'error' and lead(z.is_exist) over (order by z.date_val) = 1 then 'yes'
     else 'no'
   end to_delete
from
(select       
   t.is_exist,
   t.date_val,
   t.value,
   case
     when value - (lag(t.value) over (order by t.date_val)) is null then
     'normal'
     -- if previous measurement < new measurement
     when value - (lag(t.value) over (order by t.date_val)) >= 0 then
       case
         when abs(value - (lag(value) over (order by t.date_val)))/100 > 2/3 then
           'rollback'  -- rollback
         when abs(t.value - (lag(t.value) over(order by t.date_val)))/100 < 1/3 then
           'normal'  -- default
         when abs(t.value - (lag(t.value) over(order by t.date_val))) =  0 then               
           'normal'  -- default
         else
           'error'
       end   
        -- if previous measurement > new measurement
     when (lag(t.value) over ( order by t.date_val)) - value > 0 then
       case
         when abs(lag(value) over ( order by t.date_val)- value )/100 < 1/3 then
           'rollback'  -- rollback
         when abs(lag(value) over ( order by t.date_val) - value)/100 > 2/3 then
           'overflow'  -- overflow
         when abs(lag(value) over ( order by t.date_val)- value) =  0 then               
           'normal'  -- default
         else
           'error'                                 
     end
   end   type     

      from
        (select
           l.date_val,l.value ,0 as is_exist
         from
           test_load l
        --where l.value not in (50,30,44)   
            --where l.value not in (50,30,70,55,44)
            --where l.value not in (50,30,70,55,40,44)
        union all
          select
             e.date_val,e.value, 1 as  is_exist
          from   
            test_exists e
            order by 1 asc) t
      )z 


шаг1: Я нахожу все записи, которые не удовлетворяют выше упомянутым условиям. удаляю 3 записи (закоментированная строка --where l.value not in (50,30,44) )

шаг2: выполняю запрос еще раз - в результате невалидными становятся новые записи велью ин (70,55) (--where l.value not in (50,30,70,55,44))
шаг3: - аналогично..
шаг4 - все ок..
Можно откоментировать по очереди строки с (-- where l.value not in ) в сабселекте и запускать запрос для наглядности...

Единственное что придумал, загнать все в колекцию и перебором гонять все в цыкле , пока все будет ок.;

Данных может быть много...


Вопрос, возможно ли одним проходом найти все невалидные записи???
368
21 жовтня 2015 00:28:21
Заради цього топіку  - мусів цього року згадувати пароль до фупу  :)
369
24 грудня 2014 01:03:42
На Новий рік з дружиною та дитиною  до батьків у село на тиждень.. подалі від Львова, галасу і дощів... ) Будемо з батьком коптити домашню ковбасу та шинку...  Мама зробить білий борщ з квашених бурячків з білими грибами та м"ясом плюс вареники з лльяною олією).. все решта деталі :-)
370
19 листопада 2013 07:42:00
Дякую усім за корисні поради.. )
371
18 листопада 2013 23:16:00
Доброї ночі усім фупчекам)
 
 Так сталось що тиждень працюю у м. Миргород , Полтавська обл... Сам родом зі Львова... тож хотілось би почути поради - що можна побачити...  
 
 В планах музей Гоголя і Великі Сорочинці ).
 Цікавить в першу чергу історичні і визначні місця. (орієнтири , маршрути- з т.з туриста).  
 
 Наперед дякую )
372
24 червня 2013 13:15:00
Бартка Написав:
 -------------------------------------------------------
 > Турчинофф Написав:
 > -------------------------------------------------------
 > > Во втором туре 2015 я буду голосвать против всих!
 >  
 > Тобто, за Януковича.
 
 
 Головне не допустити всіх цих кремлівських підстилок і злодіїв до влади... А коли вони сядуть ми за рік Фьодріча адной лєвой сковірнем!!!!!
374
6 березня 2013 14:01:00
Афро-циганскіє горнякі вздрючілі фашісткіх гансов мінус трі раза!!!  
 
 Це пірімога і пакращення!!!!
376
20 листопада 2012 20:20:00
Ну і рагульня... могли ж собі самі другий закотити... а так і проїпуть і обсерруцця
377
7 вересня 2012 09:27:00
Мессершміти Герінга добивають укр гривню)
378
24 квітня 2012 14:17:00
Composer, dmsnet  - велике спасибі :-)
379
24 квітня 2012 14:02:00
nimda35 Написав:
 -------------------------------------------------------
 > Вуйко Написав:
 > -------------------------------------------------------
 > > А то обіцяють багато...
 >  
 > У каждого свой уровень для "багато". В вашем случае сколько?
 
 Хочу від 4-5  :-)
 
 (середня ланка, ПМ-и).... ну наприклад ... розробка білінгів .. єрпешок... трохи  з сапом ковирявся...
380
24 квітня 2012 13:57:00
Eagle13 Написав:
 -------------------------------------------------------
 > Вуйко, а чим тебе львiвський EPAM не влаштовуе ?
 
 
 Я не працюю і не працював на епамі... тому знати такі речі не можу :-).. По темі будь-ласка  щось розскажіть )
381
24 квітня 2012 13:53:00
не-а.. зі Львова :-)
382
24 квітня 2012 13:49:00
Якщо хтось у темі .. підскажіть плз...
 Цікавлять рівень ЗП (середня ланка, ПМ-и)  умови... атмосфера і т.д.  
 А то обіцяють багато... вірити можна? :-)
383
18 квітня 2012 15:09:00
Geo Написав:
 -------------------------------------------------------
 >  
 > =================
 > Парадокс в іншому.
 >  
 > Завдяки рекламі більший відсоток населення  його передивиться
 >  
 > "Свобода" тут ні до чого. Якщо народ - ДЕБІЛИ.
 
 На мою думку це неявна реклама таки... навіть гірше ніж нічого...
 Де хоча б історично- документальне кіно про націоналістичні організації... програми у школах... створення молодіжних патріотичних організацій (а-ля Пласту)...  
 де хоча б якісь креативні заходи... крім смолоскипів?
384
18 квітня 2012 14:56:00
Соня Написав:
 -------------------------------------------------------
 > чесно кажучи, я не можу зрозуміти позицію, коли ви даєте прибуток антиукраїнській
 > маячні. на цей прибуток будуть росіянами зніматися нові фільми з брехнею про
 > Україну і українців, з розпалюванням національної ворожнечі.
 > дивіться собі, якщо так хочеться гіменця поїсти, "матч смерті" з торентів.
 > наступного разу продюсери добре подумають, чи варто робити фільми з
 > українофобським душком, бо за це можна отримати не прибуток,а навпаки - чистий
 > збиток.
 
 
 парадокс виходить :-)
 Свобода неявно рекламує фільми з брехнею про Україну і українців.
 Завдяки рекламі більший відсоток населення  його передивиться... шо дасть змогу продюсерам робити нове "гіменце"...
 Повна зайнятість :-)
 Вія , Ви хоть раз були незгодні з політикою Свободи ?
385
28 лютого 2012 14:27:00
Vyacheslav Написав:
 -------------------------------------------------------
 > straight-pin Написав:
 > > > там WHERE есть вообще то...
 > > вы правы если будет inner join, а так будут все зиписи с таблиы L
 >  
 >  
 > Так WHERE потрібні записи й відбере. А якби був inner join, взагалі б нічого не відібрало
 
 
 каюсь, Ви праві )... Не до кінця вкурив тему).. з джоїнами оптимальний варіант)
386
28 лютого 2012 14:20:00
Запит з нот ексістом теж піде )
 Джоїни тут взагалі ні до чого...
 Але при наявності індексів на ключових полях і при кількості записів від пару мільйонів - спробуйте порівняти часи виконання обох запитів)
387
28 лютого 2012 14:15:00
тарадайка Написав:
 -------------------------------------------------------
 > не слухай Вуйка
 
 чого?)
388
28 лютого 2012 14:10:00
create table people( people_id number, declare_id number)
 create table declare( declare_id number)
 
 insert into people(people_id,declare_id) values (100,NULL)
 insert into people(people_id,declare_id) values (1,1)
 insert into people(people_id,declare_id) values (2,2)
 insert into people(people_id,declare_id) values (3,3)
 insert into people(people_id,declare_id) values (4,4)
 insert into people(people_id,declare_id) values (10,20)
 insert into people(people_id,declare_id) values (20,40)
 
 insert into declare (declare_id) values (1)
 insert into declare (declare_id) values (2)
 insert into declare (declare_id) values (3)
 
 select *
   from people p
  where p.people_id not in
        (select p.people_id
           from people p, declare d
          where d.declare_id = p.declare_id
            and p.people_id is not null
            and p.declare_id is not null)
389
4 лютого 2012 11:59:00
Посадив гуцул смереку, а виросла туя.
 Ще не мали в Президентах ми такого ... хлопа :-)
390
15 грудня 2011 22:53:00
newyo Написав:
 -------------------------------------------------------
 > Вуйко Написав:
 > -------------------------------------------------------
 > > теж позитивненька :-)
 > > [www.youtube.com]#!
 >  
 >  ;)  
 >  
 > ця прикольна також
 >  
 > [www.youtube.com]
 
 
 Це переспіви "Братів Гадюкіних"  тут ше Океан Ельзи - про третю хату від моста в Мостиськах :-)
 
 
 http://www.youtube.com
391
15 грудня 2011 22:39:00
.
 
 
 
 Редаговано разів: 1. Востаннє 16/12/2011 00:45 користувачем Вуйко.
392
15 грудня 2011 22:34:00
теж позитивненька :-)
 http://www.youtube.com/watch?v=ejVyyZGXvkk&feature=player_embedded#!
 
 
 
 Редаговано разів: 1. Востаннє 16/12/2011 00:36 користувачем Вуйко.
393
23 листопада 2011 21:35:00
ZVIAD Написав:
 -------------------------------------------------------
 > Ukraine Написав:
 > -------------------------------------------------------
 > > ZVIAD Написав:
 > > -------------------------------------------------------
 > > > Нічо, от Ахмєт скоро на шару відхватить Київенерго, а на різницю купить ще пару
 > > > абізян - ото радість донбасятам буде!
 > > > Нові перемоги - не за териконами!
 > >  
 > >  
 > > почемуна шару?жонецкие пацаны разве шо тонашарухоть раз взяли?
 > > мы еще должны бубдем...пожизненно
 >  
 > І то правда.
 > Доведеться затягнути паски, аби Ахмєту вистачило навіть на 4 абізяни.
 
 Ні хлєба ні зрєліщ нє осталось у житєлєй Донбаса  :)
394
4 листопада 2011 20:35:00
outsider Написав:
 -------------------------------------------------------
 > Ех Uki_, зла не вистача. Середня вартість лікування за кордоном це два з половиною
 > мільйони гривень. Ця лікарня мусила б лікувати сотні на рік, безкоштовно.  
 >  
 >  
 > Дибільне жлобйо її вбило а тепер наввипередки несеться і просить грошей що б його
 > коханого гівнючка врятували. Звичайно за кордоном, звичайно в найкращій можливій  
 > лікарні.

 >  
 > Грошей вистачить дай Бог що б на 30 чоловік, тому штовхаються безпощадно... І всім
 > пох...
 >  
 >  
 > Зате бажаючих подивитися на касові чеки з приводу закупки олівців, і чи не було
 > там криміналу неміряно. Вже не кажучи про тих які і без будь-яких чеків знають що
 > Катя, сука все вкрала....
 >  
 >  
 > Руки опускаються
 
 "Дибільне жлобйо" - це прості люди які віддавали по 5-50 грн.. з грошей на хліб. Сусідка пенсіонерка... Родичі у яких хвора дитина - "коханого гівнючка" - як ти кажеш...  
 Вам пля там Ющенко мозги повиїдав таке писати..... Рагулі!!!!!
397
19 жовтня 2011 22:48:00
Реально у Апоеля і Порто найбільше шансів на вихід з групи :-)
398
7 жовтня 2011 21:20:00
На другій хвилі педохвілії Таня мабуть влізе у ВР... :-)  
 Педохвільний депутат - це плюс по любе... хоча б трохи розбавить той клуб пітарасів)
400
28 червня 2011 23:41:00
це конструкторська проблема... дешевше не впаяти - ніж впаяти... от і всього дєлов... )

Повна версія