Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Есть две таблицы в одной контакты (table_contact поля id, rec_id, fam, nam, city, phone, post) на 110 тыс. Причём таблица не идеал и там полно пустоты типа шв и rec_id . а остальное как корова языком слизала. В другой таблице договора (table_rec поля id, num, org,date_start,date_finish) на 400 тыс. записей. В контактах нужно поймать всех у кого несколько договоров и оставить только тех, у кого два и более действующих договора в определённом квартале. Distinct’ом из table_contact выбираю дубли через запрос select distinct c.rec_id, r.num, r.org, (c.fam) concat ’ ‘ concat(c.nam), c.city, c.phone, c.post from table_contact as c, table_rec as r where c.rec_id=r.id and (c.fam) concat ’ ‘ concat(c.nam) in (select (c.fam) concat ’ ‘ concat(c.nam) from table_contact as c group by (c.fam) concat ’ ‘ concat(c.nam) having count (rec_id)>1) order by (c.fam) concat ’ ‘ concat(c.nam), а дальше всё швах, как только я пытаюсь добавить условие на проверку действительности договоров в квартале, например, такое, select distinct c.rec_id, r.num, r.org, (c.fam) concat ’ ‘ concat(c.nam), c.city, c.phone, c.post from table_contact as c, table_rec as r where c.rec_id=r.id and r. date_start <='01.07.2015' and r.date_finish is null or r.date_finish >=’01.07.2015’ and (c.fam) concat ’ ‘ concat(c.nam) in (select (c.fam) concat ’ ‘ concat(c.nam) from table_contact as c group by (c.fam) concat ’ ‘ concat(c.nam) having count (rec_id)>1) order by (c.fam) concat ’ ‘ concat(c.nam) ЦУ (DB2 9.7) так долго мелет шестерёнки, что желание снять запрос побеждает над чувством долга и ответственностью Пыталась сварганить что то с Union, типа (select distinct c.rec_id, r.num, r.org, (c.fam) concat ’ ‘ concat(c.nam), c.city, c.phone, c.post from table_contact as c, table_rec as r where c.rec_id=r.id and (c.fam) concat ’ ‘ concat(c.nam) in (select (c.fam) concat ’ ‘ concat(c.nam) from table_contact as c group by (c.fam) concat ’ ‘ concat(c.nam) having count (rec_id)>1) order by (c.fam) concat ’ ‘ concat(c.nam)) union (select c.rec_id, r.num, r.org, (c.fam) concat ’ ‘ concat(c.nam), c.city, c.phone, c.post from table_contact as c, table_rec as r where c.rec_id=r.id and r. date_start <='01.07.2015' and r.date_finish is null or r.date_finish >=’01.07.2015’) но процесс так же затянулся. Мб кто подскажет, где застреваю, r.num in (select для дублей из table_contact) то же пробовала, но запуталась. Что не так не понимаю, оба запроса по отдельности работают замечательно, а связать не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 23:06 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Anka_S, как-то так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Ваше условие больше подходит под определение "у кого два и более действующих договора на начало квартала", а не "у кого два и более действующих договора в определённом квартале". Договор может начаться после начала квартала, как в примере. Нужно ли вам учитывать такие договоры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 11:02 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, развейте сомнения. Смущает число 109737 пар в (as values (1, 'Иванов'), (2, 'Петров'),..., (109737,'Томас') из table_contact и ещё большее 309974 число в квадриге (as (values (1, 101, date('2015-06-01'), date('2015-08-01')) если мои опасения напрасны, что ждать придётся до 2-го пришествия, то ура и я в бой PS Да, похоже, по ночам лучше спиться, чем пишется. С условием промах получился, нужно было ставить. and(r.date_finish is null or r.date_finish between '01.07.2015' and '30.09.2015') /*r.date_finish Договора либо действующие от царя Хмэля до нв, либо они закрылись с 01.07.2015 по 30.09.2015 и по ним ещё причитается */ and r.date_start <='30.09.2015' /* r.date_start <='30.09.2015' отсекает договора заключенные в 4 квартале, по которым мы ничего не должны были, так как они ещё не существовали*/ но Ваше мне нравиться больше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 12:47 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Anka_Sразвейте сомнения. Смущает число 109737 пар в (as values (1, 'Иванов'), (2, 'Петров'),..., (109737,'Томас') из table_contact и ещё большее 309974 число в квадриге (as (values (1, 101, date('2015-06-01'), date('2015-08-01')) Я не знаю, что у вас там за оборудование, но по-моему на таких объемах этот запрос должен отработать довольно быстро, если, конечно, вы не запускаете его на телефоне. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 14:19 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Anka_S, Навеяло: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. - выводит только договора, которых больше чем один за любой квартал, согласно календаря (это таблички А*), а потом уже и справочник с контактами можно "подцепить" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 16:47 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, А можно вместо as (value (1,101, date('2015-06-01'),date('2015-08-01')), (2, 102, date ('2015-07-01'), date(''))) как то использовать as (select по тем же полям застряла на export to ex.del of del select id, num, org_name, date_start, date_finish from table_rec для списка под value да и дату не знаю как выгрузить в del она экспортируется например как 1,"022","org_name",20110913,20150203 а это совсем ни то, что у Вас :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 17:46 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Anka_S, Я использовал with ... values, чтоб показать полностью рабочий запрос без доступа к таблицам, которых у меня нет. Вам же надо использовать реальные ваши таблицы как-то так: select c.*, g.num_cnt from table_contact c join ( select id, count(1) num_cnt from table_rec where date('2015-07-01') between date_start and coalesce(date_finish, date('9999-12-31')) --date('2015-07-01') <= coalesce(date_finish, date('9999-12-31')) and date('2015-09-30') >= date_start group by id having count(1)>1 ) g on g.id=c.rec_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 18:37 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Anka_S, У вас нет опечвтки? value <> value s (value(...) - это синоним к coalsce(...) ) Посмотрите также на VARCHAR_FORMAT ( http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0007110.html ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 19:39 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Отличная новость, а то меня сегодня полдня мучил вопрос про число знаков, принимаемых в окне редактора запросов ЦУ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 21:04 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
CawaSPb, ¡Si, mucho gracias, amigo! Нужно освежить в памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 21:27 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, select c.*, g.num_cnt from table_contact c join ( select id, count(1) num_cnt from table_rec where date('2015-07-01') between date_start and coalesce(date_finish, date('9999-12-31')) --date('2015-07-01') <= coalesce(date_finish, date('9999-12-31')) and date('2015-09-30') >= date_start group by id having count(1)>1 ) g on g.id=c.rec_id Отрабатывает быстро, но возвращает 0, т.е. На вкладке Результаты запроса выводятся результаты для одного запроса. Успешно возвращено 0 строк. Что заведомо ложный результат... Проверю сейчас, что выдаёт подзапрос, мб все же даты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 07:46 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Так оно и есть подзапрос выдает 0 select id, count(1) num_cnt from table_rec where date('2015-07-01') between date_start and coalesce(date_finish, date('9999-12-31')) --date('2015-07-01') <= coalesce(date_finish, date('9999-12-31')) and date('2015-09-30') >= date_start group by id having count(1)>1 Мб я не очень точно обрисовала проблему в table_rec нет повторяющихся записей, они в table_contact по fam Т.е table_rec id | num | prav | date_start | date_finish 1 1 дог 2015-01-01 2015-01-30 2 4 контр 2015-02-02 2015-27-02 3 6 договор 2014-01-10 4 8 подряд 2015-01-06 5 10 субподряд 2015-07-20 2015-07-30 6 25 договор 2010-08-01 2015-01-04 7 33 аренда 2007-07-02 2008-08-01 . . 309974 400800 субаренда 2016-02-01 _______________________________________________ table_contact rec_id | fam | c_code | phone | position 1 Гаврилов 495 680-07-06 6 Гаврилов 495 680-07-06 директор 25 Николаев 812 540-59-83 бух . . 250000 Смирнов 3522 75-01-25 гл.инж как то так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 08:24 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Anka_SМб я не очень точно обрисовала проблему в table_rec нет повторяющихся записей, они в table_contact по fam Т.е table_rec id | num | prav | date_start | date_finish 1 1 дог 2015-01-01 2015-01-30 2 4 контр 2015-02-02 2015-27-02 3 6 договор 2014-01-10 4 8 подряд 2015-01-06 5 10 субподряд 2015-07-20 2015-07-30 6 25 договор 2010-08-01 2015-01-04 7 33 аренда 2007-07-02 2008-08-01 . . 309974 400800 субаренда 2016-02-01 _______________________________________________ table_contact rec_id | fam | c_code | phone | position 1 Гаврилов 495 680-07-06 6 Гаврилов 495 680-07-06 директор 25 Николаев 812 540-59-83 бух . . 250000 Смирнов 3522 75-01-25 гл.инж как то так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 11:45 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Ожидается, что будет получен список , например, для 1 кв. 2015 Table_rec.num | table_contact.fam | table_rec.date_start*| table_rec.date_finish* 1 Гаврилов 2015-01-01 2015-01-30 25 Гаврилов 2010-08-01 2015-01-04 * table_rec.date_start и table_rec.date _finish для наглядности **table_rec.id=table_contact.rec_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 13:48 |
|
||
|
Застревает запрос на выбор дублей с подзапросом на связке 2-х таблиц, поможите чем можите
|
|||
|---|---|---|---|
|
#18+
Anka_S, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 11:44 |
|
||
|
|

start [/forum/topic.php?fid=43&tid=1600654]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
96ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 288ms |
| total: | 473ms |

| 0 / 0 |
