|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Добрый вечер, коллеги прошу помощи в создании запроса. Много лет, как уже отошел от программирования, да и не был сильно силен в сложных запросах, а тут пришлось решать задачку и вспоминать SQL. Так вот, исходные данные - это события такого вида время начала, время окончания, поле 1, поле 2, поле 3 и т.д. Нужно 1. Сгруппировать события по времени окончания, выяснив сколько таких событий пришлось на конкретное время окончания это я сделал так Код: sql 1. 2. 3. 4. 5. 6. 7.
итог отработки такой, например Код: plaintext 1. 2. 3.
т.е. одиночных оконченных событий было 100, вариантов, когда 2 события закончились одновременно было 50 и т.д. А вот дальше мыслей нет 2. Теперь нужно добавить колонки для событий, по полю 1, т.е., всего одиночных событий было 100, из них со значением поля 1 = 0 было 60 и созначением поля 1 = было 40, т.е. таблица результата должна быть такая Код: plaintext 1. 2. 3.
STEP_COUNT = POLE1=0 + POLE1=1 (значений поля 1 - ограниченное кол-во и они являются константами - по факту это 2 значения) 3. Теперь нужно добавить колонку с суммой по полю 2 для всех событий и раздельно для событий со значениями поля 1 = 0 и 1, т.е. одиночных событий всего было 100 и сумма поля 2 для всех событий - SUMM_ALL, одиночных событий полем с 1 = 0 было 60 и сумма поля 2 для этих 60 событий - SUMM_0, одиночных событий полем с 1 = 1 было 40 и сумма поля 2 для этих 40 событий - SUMM_1, Код: plaintext 1. 2. 3.
(SUMM_ALL=SUMM_0+SUMM_1) 3. Теперь нужно добавить 3 колонки с максимальной разнцей по времени начала и конца по группе событий. Для одиночных событий, понятно это время окончания - время начала, поэтому расмотрим группу событий, допустим из 3 шт время1, время6, поле 1=0, поле 2=3.12, и т.д. время2, время6, поле 1=0, поле 2=3.15, и т.д. время4, время6, поле 1=0, поле 2=3.16, и т.д. время3, время8, поле 1=1, поле 2=3.17, и т.д. время5, время8, поле 1=1, поле 2=3.18, и т.д. время7, время8, поле 1=1, поле 2=3.19, и т.д. (время1 < время2 < ..... < время8) Для всех троек DIFF_ALL = время8-время1, для троек с полем1=0 DIFF_0 = время6-время1, для троек с полем1=1 DIFF_0 = время8-время3 Код: plaintext 1.
Вообще в нужной мне статистике много всяких столбцов, но боюсь Вас утомить и думаю, что получив подсказку (волшебный пендель) дальше уже сам доковыряю. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2019, 02:40 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
olegsng, смотри COALESCE ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2019, 08:15 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Добрый день, коллеги ну так как элегантного решения не нашлось пришлось как обычно делать с помощью костыля и селективной процедуры. Пришлось добавить доп поле к записи - STEP_ID и после сброса данных в таблицу вызвать такую процедуру Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Далее уже все просто, селективная процедура вида Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
К слову сказать, первоначальная идея с одним оператором SELECT на выборку всех необходимых данных, наверное, не сработала бы - из таблицы доставалась достаточно сложная статистика и одним запросом все сделать было бы проблематично. А так по кусочкам слепил то, что нужно. Хочу еще сказать за не очевидное поведение (на мой взгляд) оператора SELECT - может это и баян и все об этом знают - но я в обсуждениях не встречал. Да, сервер 2.5, хотя это же было и ранее на 1.0, 1.5.х Так вот, если оператор SELECT не находит данные но условию, то в переменной остается предыдущее значение, а не NULL, как это стоило бы ожидать. Код: sql 1. 2. 3. 4.
Если этот участок кода делается в цикле и на предыдущей итерации COUNT_B_G, допустим, = 5, и, если очередной SELECT не нашел данных по условию, то в COUNT_B_G останется 5, а не новое значение NULL. Поэтому я эту переменную перед циклом обнуляю (ну или зануляю по потребности). И уже, коль я выперся на форум, кто то скажет за Ded-а ? - как он, что с ним - в свое время его феномен здорово помог, думаю, что не только мне. За сим позвольте откланяться. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 14:24 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
olegsngТак вот, если оператор SELECT не находит данные но условию, то в переменной остается предыдущее значение, а не NULL, как это стоило бы ожидать. Не стоило такого ожидать Поищи, здесь на форуме были стоны ожидающих такого поведения olegsngИ уже, коль я выперся на форум, кто то скажет за Ded-а ? Появляется изредка , под новым ником "Старый плюшевый мишка " ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 15:51 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
olegsng за Ded-а ? - как он, что с ним - в свое время его феномен здорово помог, думаю, что не только мне. Чего-чего его помог??)) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 18:33 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Vlad Folegsngза Ded-а ? - как он, что с ним - в свое время его феномен здорово помог, думаю, что не только мне. Чего-чего его помог??)) Ded - сам есть живой феномен - его подробные разжевывания, подсказки, пинки и тычки помнятся через много лет, у меня до сих пор на компе лежат выписки из его постов - правда тогда это было на другом ресурсе (лет 10-15 назад). ПС - а Вы что подумали? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 19:13 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
olegsng, За Деда мне рассказывать не надо. В т.ч. и в доскрулевскую эпоху. Просто сама формулировка позабавила. Ладно, посмотрим, что он сам скажет, когда проснется. И не вспомнит ли известный анекдот, когда поциент пришел с ним к доктору.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 19:47 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Ded - это же с epsylon.public.interbase ? сколько лет! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2019, 07:05 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Tactical Nuclear Penguin> сколько лет! :) Гм... Ты вроде старожил тут (если я правильно узнал твой пред. ник)... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2019, 15:17 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
[quot olegsng И уже, коль я выперся на форум, кто то скажет за Ded-а ? - как он, что с ним[/quot] Вышел на пенсию, растолстел, отупел, обленился, ни ногами, ни извилинами почти не шевелит, практически не пьёт, разве что таблетки, сидит с клюкой на лавочке у подъезда и бубнит - в наше время в булошную на такси не ездили! В общем, превратился в пренеприятнейшего старикашку. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2019, 19:01 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Старый плюшевый мишка, Но феномен то свой сохранил в энергичном, надеюсь, состоянии?? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2019, 20:07 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Vlad FСтарый плюшевый мишка, Но феномен то свой сохранил в энергичном, надеюсь, состоянии?? В работоспособном, в принципе. Но предпочитает групповуху - просачковать можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2019, 21:23 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Старый, Снимаю шляпу, Дед, снимаю шляпу.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2019, 22:29 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Старый плюшевый мишка> сидит с клюкой на лавочке у подъезда и бубнит Ты же вроде говорил, что игрушки кампутерные играешь ? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2019, 06:04 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамСтарый плюшевый мишка> сидит с клюкой на лавочке у подъезда и бубнит Ты же вроде говорил, что игрушки кампутерные играешь ? Ну не круглые же сутки :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2019, 15:29 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамTactical Nuclear Penguin> сколько лет! :) Гм... Ты вроде старожил тут (если я правильно узнал твой пред. ник)... есть ник 2001 года... просто не думал что Ded тут :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2019, 19:19 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Старый, Ну а почему именно "у подъезда", а не в излюбленном месте зимовки россейских медведей на пенсии на даче? Ведь это все таки, как понимаю, прибалтика, а не, к примеру, заскорузлые сталинградские степи?)) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2019, 19:48 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Vlad FСтарый, Ну а почему именно "у подъезда", а не в излюбленном месте зимовки россейских медведей на пенсии на даче? Ведь это все таки, как понимаю, прибалтика, а не, к примеру, заскорузлые сталинградские степи?)) Хоспиди, ну какие вы с Рустамом прямолинейные :)) Я ж в душе художник, автопортрет рисую, в жанре импрессионизьму, а не отчёт в прокуратуру пишу ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2019, 20:53 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Tactical Nuclear PenguinГаджимурадов РустамTactical Nuclear Penguin> сколько лет! :) Гм... Ты вроде старожил тут (если я правильно узнал твой пред. ник)... есть ник 2001 года... просто не думал что Ded тут :) Да нет того Деда, нет. Не здесь, а вообще. Есть старый и больной пердун Заглядывает сюда знакомые голоса послушать, а не учить и воевать за правду-матку. Он её нынешнюю не особо понимает. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2019, 21:24 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
Vlad FСтарый, Ведь это все таки, как понимаю, прибалтика, а не, к примеру, заскорузлые сталинградские степи?)) Не понял, кто там на мои сталинградские степи крошит булочку? Старый плюшевый мишка Вышел на пенсию ........ практически не пьёт И даже курвуазье ?????? Если серьезно, то ----> Мишка, спасибо тебе огромное, за то что был и за то что есть. Только с годами понимаешь, что у тебя было и что ты потерял. Самые теплые воспоминания о том топике. Конспекты - храню, ну вот, например ------------------------------ Subject: Re: GROUP BY EXTRACT( YEAR FROM DATE_OF_PAYMENT ) Date: Wed, 08 Oct 2003 13:30:19 +0400 From: Ded <ded@hq.bereg.net> Newsgroups: epsylon.public.interbase Dmitry Yemanov wrote: > > FB1.0. Там тоже можно групировать по многим полям, но в данном случае > > поле - > > это функция EXTRACT( YEAR FROM P.DATE_OF_PAYMENT ) от поля. > > Как в group затащить поле-"функцию от поля"? > > В FB 1.0 - никак. Только написав свою UDF, которая выполняет те же действия, > что и EXTRACT, и продублировав в GROUP BY полный код вызова этой UDF. Приветики. Ну так уж и никак. По встроенной функции оно действительно группировать не умеет, но можно вызвать её внутри любой существующей UDF, не искажающей результата. В данном случае я давно пользую SELECT P.CLIENT_NUMB, Abs(EXTRACT( YEAR FROM P.DATE_OF_PAYMENT )) Y, Abs(EXTRACT( month FROM P.DATE_OF_PAYMENT )) M, SUM( PAYMENT.SUM_OF_PAYMENT) FROM PAYMENT P GROUP BY P.CLIENT_NUMB, Abs(EXTRACT( YEAR FROM P.DATE_OF_PAYMENT )), Abs(EXTRACT( month FROM P.DATE_OF_PAYMENT )), Regards. Ded. ------------------------------ Subject: Re: UDF,Delphi,Round,и я ... Date: Tue, 27 Aug 2002 15:30:59 +0400 From: Ded <ded@hq.bereg.net> Newsgroups: epsylon.public.interbase Dmitry Lendel wrote: > Вопрос больше по Delphi. Привет. Ошибаисси :) > Начал проверять и заметил > > Round(1.5) возвращает 2 > Round(40162.5) возвращает 40162 > > Я чему-то не доучился? Команде FISTP Intel-процессора. Реализующей так назваемое банковское округление, а не то, которому нас учили в школе. Я сейчас точно не помню что там должно быть чётным/нечётным чтобы решать куда округлять 0.5, но вместо него пользую function kround(d:Double):LongInt; begin if d >=0 then Result:=Trunc(d+0.5000001) else Result:=Trunc(d-0.5000001); end; Regards. Ded. ------------------------------ Короче, у меня все ходы записаны. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2019, 23:14 |
|
Помогите с запросом
|
|||
---|---|---|---|
#18+
olegsng, Спасибо. Приятно, чорт возьми :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 00:10 |
|
|
start [/forum/topic.php?fid=40&msg=39759042&tid=1560848]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
84ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 317ms |
total: | 497ms |
0 / 0 |