forum.bitel.ru http://forum.bitel.ru/ |
|
Выбрать договора без наработки за период http://forum.bitel.ru/viewtopic.php?f=19&t=8022 |
Страница 1 из 1 |
Автор: | S-10 [ 13 май 2013, 12:31 ] |
Заголовок сообщения: | Выбрать договора без наработки за период |
Пытаюсь составить запрос, который бы выдал договора с нулевой наработкой за 2013 год. Пока что есть вот такой запрос: Код: select c.title, cb.mm from contract AS c,contract_balance AS cb where (cb.yy = 2013 and cb.mm>0 and cb.mm<6) and cb.summa3=0 and cb.cid=c.id and c.gr&(1<<3)>0 group by cb.cid Но похоже, что это выводится любой договор, у которого хотя бы по одному месяцу не было наработки. А Как вывести договора, у которых по всем месяцам этого года наработка нулевая? |
Автор: | skn [ 13 май 2013, 12:40 ] |
Заголовок сообщения: | Re: Выбрать договора без наработки за период |
Код: select c.title, cb.mm, sum(summa3) as s from contract AS c,contract_balance AS cb where (cb.yy = 2013 and cb.mm>0 and cb.mm<6) and cb.cid=c.id and c.gr&(1<<3)>0 group by cb.cid having s=0
|
Автор: | S-10 [ 13 май 2013, 13:41 ] |
Заголовок сообщения: | Re: Выбрать договора без наработки за период |
Не сработало. Выбирает договора, у которых, как минимум, по одному месяцу была нулевая наработка. Ещё варианты? |
Автор: | skn [ 13 май 2013, 15:20 ] |
Заголовок сообщения: | Re: Выбрать договора без наработки за период |
Код: select title from contract where id not in (select cid from contract_balance where summa3>0 and (yy=2013 and mm>0 and mm<6) group by cid)
|
Автор: | S-10 [ 14 май 2013, 08:12 ] |
Заголовок сообщения: | Re: Выбрать договора без наработки за период |
С limit 1 выполнялся минут 15. Кто в мускуле хорошо разбирается, помогите. |
Автор: | aardvark [ 14 май 2013, 12:23 ] |
Заголовок сообщения: | Re: Выбрать договора без наработки за период |
Начните с этого Код: select * from (select cb.cid,cb.mm, sum(summa3) s3 from contract_balance cb where yy=YEAR(CURDATE()) group by cid having s3=0) as t1 добавьте необходимый соус/данные дальше используя эту таблицу как производную |
Автор: | Phricker [ 14 май 2013, 12:49 ] |
Заголовок сообщения: | Re: Выбрать договора без наработки за период |
Давно писал для каких-то своих нужд. Правда не помню оно работает корректно или нет ![]() Не исключено что я потом переписывал, но не сохранил Код: SELECT contract.id, contract.title, contract.comment, contract.STATUS, contract.fc
FROM contract LEFT JOIN contract_account AS account ON contract.id=account.cid AND (account.mm IS NULL OR account.mm<=CURDATE()) WHERE account.mm IS NULL AND contract.fc = 1 |
Автор: | S-10 [ 17 май 2013, 06:39 ] |
Заголовок сообщения: | Re: Выбрать договора без наработки за период |
aardvark писал(а): Начните с этого Код: select * from (select cb.cid,cb.mm, sum(summa3) s3 from contract_balance cb where yy=YEAR(CURDATE()) group by cid having s3=0) as t1 добавьте необходимый соус/данные дальше используя эту таблицу как производную Можно подробней? В вашем запросе достаточно лишь чтобы в одном месяце была наработка = 0, а надо чтобы во всех месяцах была нарабтка = 0. |
Автор: | aardvark [ 29 май 2013, 07:26 ] |
Заголовок сообщения: | Re: Выбрать договора без наработки за период |
не достаточно чтобы в одном месяце наработка была ноль. нужно чтобу сумма наработок была = 0, тогда договор попадёт. Проблема будет если только у вас возможна отрицательная наработка. |
Автор: | cezar [ 05 июн 2013, 05:54 ] |
Заголовок сообщения: | Re: Выбрать договора без наработки за период |
S-10 писал(а): С limit 1 выполнялся минут 15. Кто в мускуле хорошо разбирается, помогите. тут не то что бы в мускуле нужно разбираться хорошо, тут как минимум знать базу нужно, например в версии 5.1 если никаких движений в месяце по договору не было то в табличке contract_balance вообще никакой записи не будет по данному договору в данном месяце. вот проверь Код: select
cc.cid from (select contract_balance.cid, sum(contract_balance.summa3) as summ from contract left join contract_balance on cid=contract.id where yy=2013 and contract.status!=3 group by contract_balance.cid) as cc where cc.summ=0 |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |