Помогите с запросом

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Napalm
Сообщения: 9
Зарегистрирован: 25 окт 2005, 14:39

Сообщение Napalm »

Den
давай попробуем пошагово как и пытались

Код: Выделить всё

select * from rzkutprih 
WHERE ((date(01,01,2005)>>=rzkutprih.ddoc )); 
сдесь все понятно. проще этого быть не может

Код: Выделить всё

select * from rzkutprih, rzkutrash 
WHERE ((date(01,01,2005)>>=rzkutprih.ddoc 
rzkutprih.nrec==rzkutrash.crzprih ));
взяли к ранее отобранным приходам их расходы

Код: Выделить всё

select * from rzkutprih, rzkutrash 
WHERE ((date(01,01,2005)>>=rzkutprih.ddoc 
rzkutprih.nrec==rzkutrash.crzprih 
date(01,01,2005)<<=rzkutrash.ddoc)) ;
уже несколько не правильно ибо просто урезает часть расхода. т.е. если был приход до 1.1.2005 и 1 расход до а 1 скажем после этой даты, то в выборке останется этот приход с 1 расходом до даты 1.1.2005.

по условию такой приход брать совсем не нужно

Код: Выделить всё

select * from rzkutprih, rzkutrash 
WHERE ((date(01,01,205)>>=rzkutprih.ddoc 
rzkutprih.nrec==rzkutrash.crzprih 
date(01,01,205)<<=rzkutprih.ddoc 
)) 
and not isvalidall(tnrzkutrash)
когда добавили последнюю строку я совсем не пойму к каому из предыдущих условий относится так называйемый NOT IN SELECT

PS или придется старым дедовским способом "через задний проход"? select to dbf, втянуть в sql server, там запустить нормальный delete, экспортировать в dbf и импортировать в галактику? хм...
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Извини,вчре в спешке отвечал, поэтому напутал кое что похоже.

select * from rzkutprih, rzkutrash
WHERE ((date(01,01,2005)>>=rzkutprih.ddoc
rzkutprih.nrec==rzkutrash.crzprih
date(01,01,2005)>>=rzkutrash.ddoc)) ;

Вот это должно выбирать все приходы до 1-го, по которым расходы проходили до 1-го

Вот этот вариант :
select * from rzkutprih, rzkutrash
WHERE ((date(01,01,2005)>>=rzkutprih.ddoc
rzkutprih.nrec==rzkutrash.crzprih
)) and not isvalidall(tnrzkutrash);

вернет просто все записи по приходу до 1-го, по которым вообще нет записи о расходе
Napalm
Сообщения: 9
Зарегистрирован: 25 окт 2005, 14:39

Сообщение Napalm »

т.е. получается что and not isvalidall(tnrzkutrash) совсем не надо

а

select * from rzkutprih, rzkutrash
WHERE
((date(01,01,2005)>>=rzkutprih.ddoc and
double(0)==rzkutprih.ostatok and
rzkutprih.nrec==rzkutrash.crzprih and
date(01,01,2005)>>=rzkutrash.ddoc)) ;

выберет все приходы до 1-го числа по которым было все продано. в выборку попадут только те приходы по которым была хоть 1 продажа до 1-го не смотря на то были ли продажи после 1-го или нет.

как отсечь те приходы которые были до 1-го числа но по которым была хоть одна продажа после этой даты?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

я не вполне понимаю....связь идет 1:n ? то есть на одну запись в таблице приходов идет несколько записей в таблице расходов ? Тогда если так, то непонятны твои слова :

>>Код:
>>select * from rzkutprih, rzkutrash
>>WHERE ((date(01,01,2005)>>=rzkutprih.ddoc
>>rzkutprih.nrec==rzkutrash.crzprih
>>date(01,01,2005)<<=rzkutrash.ddoc)) ;
>>уже несколько не правильно ибо просто урезает часть расхода. >>т.е. если был приход до 1.1.2005 и 1 расход до а 1 скажем после >>этой даты, то в выборке останется этот приход с 1 расходом до >>даты 1.1.2005.


Если связь 1:n то запись о приходе будет неизменной !
В это селект попадут записи по тем приходам по которым была продажа или только после 1-го или и после 1-го и до 1-го.

Тебе нужны только те приходы по которым была продажа после 1-го , но не было продажи до 1-го ? :???:
Napalm
Сообщения: 9
Зарегистрирован: 25 окт 2005, 14:39

Сообщение Napalm »

мне нужны приходы по которым были продажи только до 1-го числа

поправте если я не прав, я не сильно хорошо в галактике соображаю, но я думал что если сделать выборку
where rzkutrash.crzprih=rzkutprih.nrec

и в таблице приходов только 1 запись и на нее 2 расхода, то логическая таблица в памяти будет состоять из 2 записей.

приход | расход1
приход | расход2
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

А если так :

select .....
from rzkutprih,
rzkutrash r1,
rzkutrash r2,
WHERE ((date(01,01,2005)>>=rzkutprih.ddoc
and rzkutprih.nrec==r1.crzprih
and date(01,01,2005)<<=r1.ddoc
and rzkutprih.nrec==r2.crzprih
and date(01,01,2005)>>=r2.ddoc
))
and not isvalidall(tnr2)
;
Ответить