powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
121 сообщений из 121, показаны все 5 страниц
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276211
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите осуществить Выборку из БД мужчин от 60 и старше, женщин от 55 и старше

Часть кода, где DATW - дата выписки, DATP-дата поступления, DATR - дата рождения


GOTO TOP
SELECT 1
USE kartwib
SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
GOTO TOP
SELECT 2
USE operwib INDEXES inoperp
@ 21, 10 SAY 'ЋЎаaЎ®вa*® §aЇЁбҐ© - '+STR(OBRZAP,6)
SELECT 1
KODOPR = 0
UM = 0
ITOGO = 0
DO WHILE .NOT.EOF()
OBRZAP = OBRZAP+1
@ 21, 31 SAY STR(OBRZAP,6)
WOZR = INT((DATP-DATR)/365)
DSRAB = TRIM(DSSTAT)
IF EFFEKT=6
UM = UM+1
ENDIF
SELECT 2
SEEK (A->INDEF)
IF .NOT.FOUND()
SELECT 1
SKIP
LOOP
ENDIF
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276214
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выбери сначала select`ом нужное в курсор, а затем курсор выводи.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276218
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно чуть по подробнее
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276224
Дед Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расчет возраста делается от даты рождения:
Vosrast = INT( ( DATE() - DATR )/365.25 ) )
А далее делай выборку относительно этого возраста.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276227
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
select * from kartwib where <условие> into cursor tpens
sele tpens
scan
   ... вывод tpens
endscan
sele tpens
use


в <условие> надо написать "мужчин от 60 и старше, женщин от 55 и старше"
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276228
dmr55Помогите осуществить Выборку из БДИз какой БД? Из какой таблицы? Где структура этой таблицы? мужчин от 60 и старше, женщин от 55 и старше

Часть кодаКакого кода? Что он делает и зачем он тут приведен?, где DATW - дата выписки, DATP-дата поступления, DATR - дата рождения
А где что-то, определяющее пол? Или это всё надо угадать? Или прямо из вашей головы взять?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276253
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таблица kartwib

мужчин от 60 и старше, женщин от 55 и старше

Данный код осуществляет выборку всех людей которые внесены в базу, из этих пациентов нужно вывести мужчин от 60 и старше, женщин от 55 и старше

в таблице kartwib имеется поле Pol
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276270
dmr55таблица kartwibОчень информативно, учитывая отсутствие описания структуры.
мужчин от 60 и старше, женщин от 55 и старшеНа какой момент времени сей возраст считать? На дату выписки? На дату отчета? На текущую дату?
Данный код осуществляет выборку всех людей которые внесены в базу, из этих пациентов нужно вывести мужчин от 60 и старше, женщин от 55 и старшеДанный код никакой выборки не делает, он просто перебирает все записи, подпадающие под условие команды Set filter. Так что его назначение, особенно цикл, остаётся невыясненным.
в таблице kartwib имеется поле PolКакого типа? Строка? Логическое? Число? Опять надо гадать? Структуру таблицы же нельзя ни в коем случае давать, да? Небось жутко секретная?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276316
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПомогите осуществить Выборку из БД мужчин от 60 и старше, женщин от 55 и старше
Часть кода, где DATW - дата выписки, DATP-дата поступления, DATR - дата рождения

Пол в каком поле хранится?
Как дата выписки и дата поступления влияет на результат запроса?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276321
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторполе Pol
увидел.

А как в нем М от Ж отличается?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276323
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ввбрать куда?
В курсор, в файл .. . .
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276340
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мужской - м
женский - ж

В программе есть меню - выбыр формы - в этой форме ставится допустим дата с 01.01.2016-02.01.2016 - выходят все данные людей, и в этих данных должны отбираться муж с 60лет и старше, жен с 55 и старше
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276374
dmr55мужской - м
женский - ж

В программе есть меню - выбыр формы - в этой форме ставится допустим дата с 01.01.2016-02.01.2016 - выходят все данные людей, и в этих данных должны отбираться муж с 60лет и старше, жен с 55 и старшеА можно не повторять мантры, понятные еще из первого сообщения, и отвечать только на поставленные вопросы? Кого надо выбрать мы уже знаем, вы пока не дали информации по другим условиям отбора. В частности, второй раз спрашиваю: на какой момент времени считается возраст? Или до вас не доходит, что возраст величина непостоянная и может меняться в зависимости от даты, на которую он считается?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276394
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программа рабтает так, выбираем дату любую, например 01.02.2016 - 10.02.2016 и должны выходить нужные м и ж
Опираться на системную дату и время самого компа
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276399
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
ldReport = date() && дата на которую считаем
ld60 = ldReport - 60 * 365.25
ld55 = ldReport - 55 * 365.25
select * from kartwib where (DATR <= ld60 and Pol = 'М') or (DATR <= ld55 and Pol = 'Ж')  into cursor tpens
brow


Это на сегодня. Если надо конкретную дату - замени date() на переменную с этой датой.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276421
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55в этой форме ставится допустим дата с 01.01.2016-02.01.2016 - выходят все данные людей, и в этих данных должны отбираться муж с 60лет и старше, жен с 55 и старше
Добавь это условие туда же в селект, как понимаю это то что у тебя в SET FILTER TO написано
Код: sql
1.
2.
...
select * from kartwib where (DATW>=MINDAT.AND.DATW<=MAXDAT.AND.SRDOOP>0) and ((DATR <= ld60 and Pol = 'М') or (DATR <= ld55 and Pol = 'Ж'))  into cursor tpens
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276434
dmr55Опираться на системную дату и время самого компа
Как вариант для размышлений:
[SRC sql][/* date() && дата на которую считаем
select * from kartwib where Date() < Ctod(Str(Day(DATR))+'.'+Str(Month(DATR))+'.'+Str(Year(DATR)+Iif(Pol = 'м', 60, 55))) into cursor tpens
brow
SRC]
Не проверял, писал на коленке.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276437
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если твой код править, то можно просто это
dmr55 SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)

заменить на
Код: sql
1.
SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT.AND.SRDOOP>0) and ((DATR <= date() - 60 * 365.25 and Pol = 'М') or (DATR <= date() - 55 * 365.25 and Pol = 'Ж'))


PS твой код не должен работать, т.к. скобки одной не хватает.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276455
Dima TPS твой код не должен работать, т.к. скобки одной не хватает.Ну так может последнюю строку моего сообщения таки прочитать? :)

Мой метод работает с точными датами, умножение на 365.25 дает приблизительный результат.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276482
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильный проходящий.Мой метод работает с точными датами, умножение на 365.25 дает приблизительный результат.
И что твой метод выдаст если запустить его 29.02 ?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276488
Dima Tправильный проходящий.Мой метод работает с точными датами, умножение на 365.25 дает приблизительный результат.
И что твой метод выдаст если запустить его 29.02 ?А это уже вопрос к постановщикам задачи - как определять возраст тех, кто родился 29 февраля? При получении ответа внести соответствующие коррективы в код.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276583
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите тогда эти два запроса можно sql сделать в один и включить в код, потому что у меня если и что-то выходит то выходит как отдельная форма типа запроса

SELECT * FROM kartwib WHERE Datr>=CTOD('01.01.1961') AND Pol=('ж')
SELECT * FROM kartwib WHERE Datr>=CTOD('01.01.1956') AND Pol=('м')
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276631
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Скажите тогда эти два запроса можно sql сделать в один и включить в код, потому что у меня если и что-то выходит то выходит как отдельная форма типа запроса

SELECT * FROM kartwib WHERE Datr>=CTOD('01.01.1961') AND Pol=('ж')
SELECT * FROM kartwib WHERE Datr>=CTOD('01.01.1956') AND Pol=('м')
Код: sql
1.
SELECT * FROM kartwib WHERE (Datr>=CTOD('01.01.1961') AND Pol=('ж')) or (Datr>=CTOD('01.01.1956') AND Pol=('м'))
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276663
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так помоему будет верно

SELECT * FROM kartwib WHERE (Datr<=CTOD('01.01.1961') AND Pol=('ж')) or (Datr<=CTOD('01.01.1956') AND Pol=('м'))

Скажите сточку в командной строке работает, а можно ли ее в код вставить ни чего там не удаляя
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276666
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55вот так помоему будет верно

SELECT * FROM kartwib WHERE (Datr<=CTOD('01.01.1961') AND Pol=('ж')) or (Datr<=CTOD('01.01.1956') AND Pol=('м'))
Это тоже самое с небольшой оптимизацией, типа не зависимо от пола все пенсионеры в 60+

dmr55Скажите сточку в командной строке работает, а можно ли ее в код вставить ни чего там не удаляя
уже писал, твой исходный код изначально что-то фильтрует
Код: sql
1.
SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)


просто добавь туда фильтр по пенсионерам
Код: sql
1.
SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0) and (Datr<=CTOD('01.01.1961') AND Pol=('ж')) or (Datr<=CTOD('01.01.1956') AND Pol=('м'))
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276776
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил
SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0) and (Datr<=CTOD('01.01.1961') AND Pol=('ж')) or (Datr<=CTOD('01.01.1956') AND Pol=('м'))

но данные выходят такое же количество как и без добавленного
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276786
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В скобки надо брать
Код: sql
1.
SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0) and ((Datr<=CTOD('01.01.1961') AND Pol=('ж')) or (Datr<=CTOD('01.01.1956') AND Pol=('м')))


И разберись сначала со скобками в исходном условии
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276880
Дед Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С датами можно работать, как складывая, так и вычитая, при этом если прибявляем цифры, то формат понимает их как дни. Если от текущей даты (системная функция DATE()) отнять дату дня рождения, то получаем количество прожитых дней. При делении этих дней на 365.25, мы получаем количество полных прожитых лет и в остатке, прожитых дней. Если в задаче стоит выборка по полным годам, то все отбрасывается после запятой командой INT()
SELECT + FROM Tabl WHERE pol = 'М' AND INT((DATE()-Datr)/365.25) >= 60 INTO CURSOR REpot_M && для мужчин
SELECT + FROM Tabl WHERE pol = 'Ж' AND INT((DATE()-Datr)/365.25) >= 55 INTO CURSOR REpot_F && для женщин
Если нужно выбрать по диапазону, а на не текущую дату, то вместо системной функции DATE(), можно воспользоваться функцикй BETWEN()
dTekDate = {} && Можно здесь прописать и фиксированную дату
SELECT + FROM Tabl WHERE pol = 'М' AND INT((BETEEN(dTekDate,DATE()-5,DATE()+5)-Datr)/365.25) >= 60 INTO CURSOR REpot_M && для мужчин
SELECT + FROM Tabl WHERE pol = 'Ж' AND INT((BETEEN(dTekDate,DATE()-5,DATE()+5)-Datr)/365.25) >= 55 INTO CURSOR REpot_F && для женщин
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276898
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да правильно вы написали про даты рождения мне сначала нужно это чтобы получилось в командной строке и лучше без id... и курсоров, таблица должна выводится такаеже без переименования столбцов, чтобы уже после можно было проверить в программе результат
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276970
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выяснилась что сортировка должна происходить по дате поступления, если муж на дату поступления уже есть 60 лет и женщине есть 55 лет то тогда нужно чтобы показывались нужные лица

Datp - Дата поступления
Datr - Дата рождения
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276982
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь за не полный вопрос
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39276987
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Выяснилась что сортировка должна происходить по дате поступления, если муж на дату поступления уже есть 60 лет и женщине есть 55 лет то тогда нужно чтобы показывались нужные лица

Datp - Дата поступления
Datr - Дата рождения
ну так замени date() на Datp
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39277023
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, сначала в sql пробую

SELECT * FROM kartwib WHERE ((Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 55 * 365.25 and Pol = 'ж'))
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39277464
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторDatr <= Datp - 60 * 365.25 and Pol = 'м'

Перевожу:
Мужчины с датой рождения меньшей чем (дата поступления минус 60лет)
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39277466
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри. Увидел изменения в постановке.
Тогда правильно
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39277488
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я протестировал в sql запросе получается выбирается все как , буду пробовать в коде
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39284751
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДОБАВИЛ В КОД
SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT.AND.((Datr <= Datp - 60 * 365.25 or Pol = 'м') or (Datr <= Datp - 55 * 365.25 or Pol = 'ж'))).AND.SRDOOP>0)
Но в одном пункте вылезло на одно число больше.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39284763
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На одно число больше чем где? Что за число вообще там вылазит? После селекта таблица получается, а не число.
Если речь что количество записей не совпало, опять же с чем не совпало?
Вобщем берешь оба результата и сравниваешь, находишь запись которая есть только в одной из выборок и дальше разбираться с ней.

Тут 19485011 я вроде по русски писал: приводи пример исходных данных и будем разбирать.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285182
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходник весь представить не могу

Сочетание в фильтре показывает либо как будто и не фильтровал муж старше 60 и жен старше 55 либо показывает 0, с разными перестановками скобок

SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0) and ((Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 55 * 365.25 and Pol = 'ж'))
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285330
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для начала сделай так
Код: sql
1.
2.
3.
4.
SET FILTER TO ((Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 55 * 365.25 and Pol = 'ж'))
count to q
? q && количество выбранных записей
brow  && просмотр выбранных записей


посмотри глазками и найди хотя бы одну неправильную запись и напиши ее сюда, персональных данных не надо, достаточно значения полей Datr, Datp, Pol

Есть еще такой момент, для select этот фильтр не применяется, т.е. если ты после сделаешь sefect * from ... то выберется все что есть в таблице.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285337
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще момент с collate, т.е. в зависимости от установок может быть 'м' != 'М' для проверки
Код: sql
1.
2.
SET FILTER TO Datr <= Datp - 60 * 365.25 and Pol != 'м' and Pol != 'ж'
brow
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285615
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первом примере получается 0 данных, а во втором что-то получается но выходит отдельная таблица но не совсем что ожидалось, а куда потерялся изначальный код (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285700
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55а куда потерялся изначальный код (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
Убрал за ненадобностью. Это отладка, если считаешь что в этой части нет проблем то, то ее можно убрать. Где данные что все плохо?
вроде по-русски написал
Dima Tпосмотри глазками и найди хотя бы одну неправильную запись и напиши ее сюда, персональных данных не надо, достаточно значения полей Datr, Datp, Pol
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285812
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В
SET FILTER TO Datr <= Datp - 60 * 365.25 and Pol != 'м' and Pol != 'ж'
brow

Появляется копия полной таблицы, при быстром просмотре даже не вижу женщин 1960годами
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285813
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такая форма должна выходить а выходит
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285828
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Такая форма должна выходить а выходит
С тобой как в старом анекдоте
Василий Иванович с Петькой летят на самолете:
ВИ: Петька, приборы!
П: Двести!
ВИ: Что двести?!
П: А что приборы?

Отлаживают программы по частям, а не сразу на итого смотрят.
brow это просмотр записей которые попадут в отчет. Оно тебе показало что подпадает под установленный фильтр.

Хотя польза от твоих картин есть, я уже забыл что у тебя FPD, а там большие и маленькие буквы это разные буквы, т.е. "м" это не "М".
Попробуй так
Код: sql
1.
SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0) and ((Datr <= Datp - 60 * 365.25 and inlist(Pol, 'м', 'М')) or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))) 


Если не поможет, то ищи КОНКРЕТНЫЕ записи в исходной таблице которые должны попадать, но не попали, или наоборот, не должны, но попали в отчет. И пиши сюда: Datr = 10.12.1955, Datp = 15.07.2016, Pol = "Ж" ...

И еще такой момент: у тебя в датах (когда brow делаешь) сколько цифр года видно? Если две то запросто может быть что 15.07.16 это 15.07. 19 16
Сделай так и посмотри
Код: sql
1.
2.
set century on 
brow


первая строка - это показывать код 4-мя цифрами
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285878
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда делаю brow в появившейся таблице видны в столбце Datr вот такого формата 26.11.1932

Когда вставляю и просматриваю код
SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0) and ((Datr <= Datp - 60 * 365.25 and inlist(Pol, 'м', 'М')) or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))
set century on
brow

Выходят все без изменения, не отбираются
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285891
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да точно м и М разное, что то SQL запрос не получается с обоими м и М, ж и Ж
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285893
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Выходят все без изменения, не отбираются
Ты читать умеешь? Третий раз прошу:
Dima TЕсли не поможет, то ищи КОНКРЕТНЫЕ записи в исходной таблице которые должны попадать, но не попали, или наоборот, не должны, но попали в отчет. И пиши сюда: Datr = 10.12.1955, Datp = 15.07.2016, Pol = "Ж" ...
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285954
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо что указал на маленькие и большие м и ж, проверил выборку в sql на заданную дату

Получилось 167
SELECT * FROM kartwib WHERE ((Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 55 * 365.25 and Pol = 'ж'))

Получилось 184
SELECT * FROM kartwib WHERE ((Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 60 * 365.25 and Pol = 'М') or (Datr <= Datp - 55 * 365.25 and Pol = 'ж') or (Datr <= Datp - 55 * 365.25 and Pol = 'Ж'))
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285964
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inlist() не заметил выше? 19496193
лучше так напиши
Код: sql
1.
SELECT * FROM kartwib WHERE (Datr <= Datp - 60 * 365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285984
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
результат по выборке такой же но почему-то твой весит на 14 килобайт больше моего файла
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286843
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал Задал дату с 01.01.2016-01.01.2016
SQL запрос SELECT * FROM kartwib WHERE (Datr <= Datp - 60 * 365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))
Сохранил в dbf и заменил, получились вылезли даты рождения
06.11.1956 ж 952
26.11.1932 ж 251
25.11.1953 м 14525
12.11.1938 ж 14602

В коде программы
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
26.11.1932 ж 251
25.11.1953 м 14525
12.11.1938 ж 14602

Получается через код не попадает 06.11.1956 ж 952
(цифры после м и ж этот для простоты поиска идентификаторы)

Ну и если поставить период больше например весь январь, то по коду - 165, а по sql - 184
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286847
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда замененный сохраненный выбранный sql запрос dbf в программу и тем самым код
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
то также показывает 184
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286849
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал открыл через visual foxpro 6 и экспортировал ни делая ни каких запросов (пересохранил) в dbf2.x и кинул(заменил) в программе вышло правильное кол-во но вместо русских букв крякозябры(где ФИО)
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286861
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Получается через код не попадает 06.11.1956 ж 952
(цифры после м и ж этот для простоты поиска идентификаторы)

Ну и если поставить период больше например весь январь, то по коду - 165, а по sql - 184
Не смущает что условия выборки разные? у селекта нет .AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
смотри для этой записи что в полях DATW и SRDOOP
и пиши сюда содержимое всех используемых полей если сам разобраться не можешь. Даты смотри с 4 цифрами года.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286862
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55вместо русских букв крякозябры(где ФИО)
Я тебе уже писал как задать 866 кодовую страницу.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286897
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и что, что у Селекта нет .AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)

Когда я беру файл с полной базой, никаких запросов не делаю, а просто экспортирую его в dbf2.x и кидаю(заменяю) в программе конечно выходят крякозябры(хрен с ними этот так для проверки) но и выходит правильное кол-во ведь в коде та есть .AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)

Проверил 06.11.1956 ж 952
DATW - 01.01.2016 правильно должна выходить
SRDOOP - 1 правильно должна выходить
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286904
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MINDAT и MAXDAT это переменные или поля?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286910
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переменные

PUBLIC MINDAT, MAXDAT, MINOTD
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286926
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже запросу
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
что-то мешает из "родной" dbf таблицы выбирать все что надо, ведь когда пересохраняешь ее в dbf2.x и кидаешь(заменяешь) все что надо показывает с (крякозябрами)
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286927
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя скобки нехватает
Код: sql
1.
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)



Вот тест, выбирается в обоих случаях
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create cursor kartwib (Datr d, Datp d, datw d, pol c(1), srdoop n(1))
insert into kartwib values ({^1956-06-11}, {^2016-02-02}, {^2016-01-01}, 'ж', 1)

MINDAT = {^2016-01-01}
MAXDAT = {^2016-06-01}

SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
brow

SELECT * FROM kartwib WHERE ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)


Т.к. всех данных я от тебя добиться так и не смог, то неизвестное дописал сам. Поправь даты на свои и проверь что в обоих случаях выбирается.

Если результаты одинаковые, то проблема где-то в другом твоем коде.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286931
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Похоже запросу
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
что-то мешает из "родной" dbf таблицы выбирать все что надо, ведь когда пересохраняешь ее в dbf2.x и кидаешь(заменяешь) все что надо показывает с (крякозябрами)
крякозябры мешают - в кракозябрах 'ж' превращается в кракозябру и не выбирается, т.е. ты потерял всех женщин от 55 до 60.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286968
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скобку добавил - рузультат тот же

Сделал выборку за январь
В сохраненном(замененном) dbf женщин находит от 55-60, ведь здесь крякозябы и всех показывает
В родном dbf похоже не находит женщин от 55-60, все читаемо крякозябрь нет и данные не все

Запрос с "родной базой"
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
в коде не может все показать

А в сохраненном(экспортированном) все показывает
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286990
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже sql запрос в коде foxpro2.6 не может проработать целиком выборку данного формата(родного) dbf файла
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287012
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Запрос с "родной базой" ... в коде не может все показать

А в сохраненном(экспортированном) все показывает
Нет тут телепатов. Как я должен догадаться откуда взялся второй источник данных? Зачем вообще этот экспорт из VFP6 в FPD2? Зачем две базы и где гарантия что обе содержат одинаковую инфу? Почему нельзя все проверки выполнять в FPD?

PS Я уже устал из тебя вытягивать инфу по крупицам. Как я вижу, ты не понимая сути происходящего, просто перебираешь варианты какие в голову придут, авось пазл сойдется и все станет хорошо. С таким подходом можно долго перебирать.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287113
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
в данном запросе не нахожу женщин от 55-60, они туда не попадают

какую нужно инфу
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287952
Student009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmr55Помогите осуществить Выборку из БД мужчин от 60 и старше, женщин от 55 и старше

Часть кода, где DATW - дата выписки, DATP-дата поступления, DATR - дата рождения

Dima T - это Хохол, натуральный усpаинский Какел. Не слушай какелов!
Забудь про мистическое число 365.25.

Вот простое решение твоей задачи:

SET COLLATE TO 'RUSSIAN' && Это надо для 'м' или 'ж' если вдруг нечайно внесут в базу большими буквами 'М' или 'Ж'

SELECT * FROM kartwib WHERE Pol='м' AND YEAR(DATE())-YEAR(Datr)>=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()) INTO CURSOR деды

SELECT * FROM kartwib WHERE Pol='ж' AND YEAR(DATE())-YEAR(Datr)>=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()) INTO CURSOR бабки

Всё?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287954
Student009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
*Небольшая поправочка в предыдущем коде, сути не меняет.

SET COLLATE TO 'RUSSIAN' && Это надо для 'м' или 'ж' если вдруг нечайно внесут в базу большими буквами 'М' или 'Ж'

SELECT * FROM kartwib WHERE Pol='м' AND (YEAR(DATE())-YEAR(Datr)>60 OR YEAR(DATE())-YEAR(Datr)=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE())) INTO CURSOR деды

SELECT * FROM kartwib WHERE Pol='ж' AND (YEAR(DATE())-YEAR(Datr)>55 OR YEAR(DATE())-YEAR(Datr)=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE())) INTO CURSOR бабки
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287959
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в одну строчку можно записать этот запрос через set filter
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287965
Student009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmr55в одну строчку можно записать этот запрос через set filter

SET COLLATE TO 'RUSSIAN'
SET EXCLUSIVE OFF

SELECT 0
USE kartwib ALIAS kartwib_m && деды
SET FILTER TO Pol='м' AND (YEAR(DATE())-YEAR(Datr)>60 OR YEAR(DATE())-YEAR(Datr)=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()))

SELECT 0
USE kartwib ALIAS kartwib_w && бабки
SET FILTER TO Pol='ж' AND (YEAR(DATE())-YEAR(Datr)>55 OR YEAR(DATE())-YEAR(Datr)=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()))
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287970
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Student009SET COLLATE TO 'RUSSIAN'
Какел, или как тебя там, тему топика прочитай "...Foxpro 2.6" и не запутывай человека, он и так запутался по самые нехочу.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287986
Student009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SET EXCLUSIVE OFF

SELECT 0
USE kartwib ALIAS kartwib_m && деды
SET FILTER TO LOWER(Pol)='м' AND (YEAR(DATE())-YEAR(Datr)>60 OR YEAR(DATE())-YEAR(Datr)=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()))

SELECT 0
USE kartwib ALIAS kartwib_w && бабки
SET FILTER TO LOWER(Pol)='ж' AND (YEAR(DATE())-YEAR(Datr)>55 OR YEAR(DATE())-YEAR(Datr)=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()))

Всем поxеp на каклосвиней и их высеры.
Dima T известный хохол, потому не смог решить простейшую задачу, он только выё6ываться может. Dima T, валил бы ты отсюда на хохляцкий сайт? Админы, забаньте наконец этого бандеровского хохла, он уже тут всем надоел.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288035
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТЕСТ СРЕДСТВАМИ VISUAL FOX PRO 6 SQL и EXCEL 2010

1
SELECT * FROM kartwib WHERE ((Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 60 * 365.25 and Pol = 'М') or (Datr <= Datp - 55 * 365.25 and Pol = 'ж') or (Datr <= Datp - 55 * 365.25 and Pol = 'Ж'))
7397 записей, включая без даты рождения
01-01-2016 - 31-01-2016 184 01-01-2016 - 31-03-2016 700
2
SELECT * FROM kartwib WHERE (Datr <= Datp - 60 * 365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))
7493 записей, включая без даты рождения
01-01-2016 - 31-01-2016 184 01-01-2016 - 31-03-2016 700
3
SELECT * FROM kartwib WHERE Pol='м' AND (YEAR(DATE())-YEAR(Datr)>60 OR YEAR(DATE())-YEAR(Datr)=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE())) OR Pol='М' AND (YEAR(DATE())-YEAR(Datr)>60 OR YEAR(DATE())-YEAR(Datr)=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE())) OR (Pol)='ж' AND (YEAR(DATE())-YEAR(Datr)>55 OR YEAR(DATE())-YEAR(Datr)=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE())) OR (Pol)='Ж' AND (YEAR(DATE())-YEAR(Datr)>55 OR YEAR(DATE())-YEAR(Datr)=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()))
7411 записей, включая без даты рождения
01-01-2016 - 31-01-2016 184 01-01-2016 - 31-03-2016 694

Решил сравнить 2 и 3 результат, какие все таки данные не вошли в 3 вариант средствами Excel 2010
1 Во второй вариант вошли данные исходя из Excel это самые младшие только рожденные с Января 1961 – Апрель 1961, с мая по декабрь данных нет (ну и все 1960 года и старше)

2 В третий вариант вошли данные из Excel это самые младшие только рожденные с Августа – Декабрь 1961года (ну и все 1960года и старше)
Из Excel вижу что самые младшие начинаются с 8.08.1961

3 Ну и 1 и 2 варианты дают аналогичную картину (самые младшие только рожденные с Января 1961 – Апрель 1961)

Получается 2 вариант более короткий, но у него выборка самые младшие с с Января 1961 – Апрель 1961, куда то потерялись с мая – 8 августа(т.к. сейчас 8 августа)
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288041
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Варианты 1 и 2 должны одинаковый результат давать, разница может быть только из-за безполых и без даты рождения.

Посмотри есть ли бесполые записи, т.е.
Код: sql
1.
SELECT * FROM kartwib WHERE !inlist(Pol, 'ж', 'Ж', 'м', 'М')


Если есть то надо исправлять

Проверь такие запросы (с пропуском пустых Datr)
Код: sql
1.
2.
3.
4.
5.
SELECT * FROM kartwib WHERE !empty(Datr) and (;
                                (Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 60 * 365.25 and Pol = 'М');
                                or (Datr <= Datp - 55 * 365.25 and Pol = 'ж') or (Datr <= Datp - 55 * 365.25 and Pol = 'Ж'))

SELECT * FROM kartwib WHERE !empty(Datr) and (Datr <= Datp - 60 * 365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))



dmr55Получается 2 вариант более короткий, но у него выборка самые младшие с с Января 1961 – Апрель 1961, куда то потерялись с мая – 8 августа(т.к. сейчас 8 августа)
Чем отличается Datp от DATE() ?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288042
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пустые даты корректнее отслеживать через Datp - Datr , т.е. так будет без пустых Datr
Код: sql
1.
SELECT *FROM kartwib WHERE (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288122
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1
Да бесполые по данному запосу есть, хотя они не много, но два выходят бесполых с ненулевым значением (т.е. в столбце Srdoop с ненулевым значением это 1-4цифры, а с нулевым это 0)
SELECT * FROM kartwib WHERE !inlist(Pol, 'ж', 'Ж', 'м', 'М') НО ЭТО ТАК К СВЕДЕНИЮ

2
SELECT * FROM kartwib WHERE !empty(Datr) and (;
(Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 60 * 365.25 and Pol = 'М');
or (Datr <= Datp - 55 * 365.25 and Pol = 'ж') or (Datr <= Datp - 55 * 365.25 and Pol = 'Ж'))

По данным Excel – 7016, пустых дат нет, но в фильтре видно что самые молодые с января-апрель, май – 8августа не показывает.
Этот такой же результат
SELECT * FROM kartwib WHERE !empty(Datr) and (Datr <= Datp - 60 * 365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))

3
DATE – это из примера Student009, по его примеру тестировал

4
SELECT *FROM kartwib WHERE (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))
Показывает тот же результат что и во 2 пункте (самые молодые с января-апрель, май – 8августа не показывает)
)

5
SELECT *FROM kartwib WHERE (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))
Попробовал пересохранить dbf файл в dbf2.x сделал sql запрос и открыл снова через Excel кол-во показало 5854(гораздо меньше), но теперь в фильтре Excel показывает месяца из 1961года(янв фев март апр июнь), майских вроде нет, а вот июльские 2женщины увидел
Одна женщина вылезла 1984г это пому что datp 2039(НО ЭТО МЕЛОЧЬ)
НАПОМНЮ ВАМ ЧТО РЕЧЬ ИДЕТ ПРО ЖЕНЩИН 1961ГОДА КОТ НЕ ВЫБИРАЮТСЯ ВСЕ
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288139
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 Показывает женщин по общей базе (из Excel). . . – 1961 4 августа - 3784ж
2 По запросу 3726ж

НА 58 ЖЕНЩИН МЕНЬШЕ

По этому запросу(2)
SELECT *FROM kartwib WHERE (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288220
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай уже данные, без ФИО, только нужное.
Запусти этот код
Код: sql
1.
2.
sele kartwib 
copy to kartwib_copy fields Datp, Datr, Pol, Datw, Srdoop


и выкладывай сюда kartwib_copy.dbf
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288226
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или мне вышли сюда simepunez@lackmail.ru
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288435
Student009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tили мне вышли сюда simepunez@lackmail.ru
Пришлите Диме сала в шоколаде. Хохол уже 4 страницы кала навоял. Простейшую задачу решить не может.
Позорище.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288742
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скинул
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288801
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Скинул
Попробуй еще раз simepunez@lackmail.ru
ящик одноразовый, возможно не принимает когда закрыт.
И запакуй, возможно есть ограничения по размеру.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288809
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверь
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288833
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получил. Выбирается 7016 записей, есть женщины 55 лет, добавил возраст в запрос
Код: sql
1.
SELECT (datp - datr) / 365.25 as vozr, * FROM kartwib_ WHERE (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))) order by 1


так тот же результат 7016
Код: sql
1.
2.
3.
SELECT * FROM kartwib WHERE !empty(Datr) and (;
(Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 60 * 365.25 and Pol = 'М');
or (Datr <= Datp - 55 * 365.25 and Pol = 'ж') or (Datr <= Datp - 55 * 365.25 and Pol = 'Ж'))


Что именно не так по твоему мнению?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288848
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сохранить в excel то дата рождения у женщин 1961 года с января-апрель, с мая - август нету
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288856
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
около 40 женщин 1961 с мая-август нету, не проверяя мужиков
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288860
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Если сохранить в excel то дата рождения у женщин 1961 года с января-апрель, с мая - август нету
Нет потому что ты считаешь возраст на DATP (как понимаю дата проведения обследования), а последняя DATP 13.05.2016. Будут данные за май - август, будут и пенсионеры май-август 1961 года
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289380
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тестировал с 01.01.2016 – 15.01.2016
ТЕСТ ПО ВСЕЙ БАЗЕ ПРАВИЛЬНО

ПО ВСЕ БАЗЕ БЕЗ ВЫБОРОК
Сохранил в Excel
Datw 01.01.2016 – 15.01.2016
Srdoop 1-4

Добавляем новую ячейку и вставляем =РАЗНДАТ(E2;Q2;"y")&"г."&РАЗНДАТ(E2;Q2;"ym")&"мес."&РАЗНДАТ(E2;Q2;"md")&"дн."
В E2 – ДАТА РОЖДЕНИЯ
В Q2 – СТОИТ ТЕКУЩАЯ ДАТА

Сначала ж 55-старше 53человека
Потом м 60-старше 33человека
Общее кол-во 86человек



ТЕСТ ПО SQL ЗАПРОСУ ПРАВИЛЬНО

SELECT * FROM kartwib WHERE !empty(Datr) and (;
(Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 60 * 365.25 and Pol = 'М');
or (Datr <= Datp - 55 * 365.25 and Pol = 'ж') or (Datr <= Datp - 55 * 365.25 and Pol = 'Ж'))
Srdoop 1-4
Общее кол-во 86человек

ТЕСТ ПО SQL ЗАПРОСУ ПРАВИЛЬНО

SELECT * FROM kartwib WHERE ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))))
Srdoop 1-4
Общее кол-во 86человек


ВСТАВИЛ В КОД
SET FILTER TO (((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))) .AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
Итого – 76 Куда то потерялись 10
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289385
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Общее кол-во 86человек


ВСТАВИЛ В КОД
SET FILTER TO (((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))) .AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
Итого – 76 Куда то потерялись 10
у меня получается 86
Код: sql
1.
2.
3.
SET FILTER TO (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))) .AND.(DATW>={^2016-01-01}.AND.DATW<={^2016-01-15}).AND.SRDOOP>0
count to q
? q


т.е. проблема не в SET FILTER а где-то в другом месте. Смотри код.

PS поправь проверку возраста чтобы пустые Datr не обрабатывались.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289389
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если тут 19426842 исходный код, то у тебя вот еще проверка
dmr55
Код: sql
1.
2.
3.
      IF EFFEKT=6
         UM = UM+1
      ENDIF


Посмотри в 86-ти сколько имеют EFFEKT=6
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289424
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вставляю в код
SET FILTER TO (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))) .AND.(DATW>={^2016-01-01}.AND.DATW<={^2016-01-15}).AND.SRDOOP>0
count to q
? q

нули какую либо дату не ставил

Могу скинуть PRG файл
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289433
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55нули какую либо дату не ставил
ты мне мозг взорвал этой фразой

Не обязательно в PRG писать, можно просто по очереди эти строки вставлять в окно command.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289436
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне нужно именно в prg файл
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289437
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты с кракозябрами разобрался? Я проверил, из-за них потеряется ровно 10 женщин из 86-ти
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289446
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как проверял?

Кракозябры тогда, когда я делаю sql запрос в visual foxpro 6 - и кидаю(заменяю) karwib, запускал код с brow и у меня все русские в крякозябрах и количество показывало 86

А вот в коде
SET FILTER TO (((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))) .AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
Выбирая дату с 01.01.2016-15.01.2016 показывает 76, и крякозябр нету
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289476
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Как проверял?
Убрал or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')) - стало 76 записей
Код: sql
1.
SET FILTER TO (Datp - Datr >= 60 * 365.25) .AND.(DATW>={^2016-01-01}.AND.DATW<={^2016-01-15}).AND.SRDOOP>0


dmr55Кракозябры тогда, когда я делаю sql запрос в visual foxpro 6 - и кидаю(заменяю) karwib, запускал код с brow и у меня все русские в крякозябрах и количество показывало 86

Давай по порядку. Как понимаю сам код у тебя должен работать в Foxpro 2.6. Так?

Открывай Foxpro 2.6 и смотри там на русские буквы:
1. Данные. Открываешь таблицу karwib и смотришь (brow).
2. Код. Открываешь свой PRG и смотри как написано 'ж', 'Ж'
и удали одноименный FXP - это скомпилированный PRG, если ты двумя фоксами лазил, то возможно 6-м скомпилировал.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289481
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да код работает в foxpro2.6
1 Открыл kartwib через foxpro2.6 (FOXPROLем) USE kartwib - brow - русские буквы есть
2 ж и Ж нормально написано
SET FILTER TO (((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))) .AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)

.FXP удалил
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289516
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что в итоге? 76 или 86?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289519
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
76
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289525
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это запусти в foxpro2.6 в окошке command
Код: sql
1.
2.
3.
SET FILTER TO (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))) .AND.(DATW>={^2016-01-01}.AND.DATW<={^2016-01-15}).AND.SRDOOP>0
count to q
? q


Сколько выдаст?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289537
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда в visual foxpro 6 просто сохраняю не делая никаких запросов в dbf2.x и заменяю его
и при чем в коде
SET FILTER TO (((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))) .AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
то в итоге получается 86, если смотреть через brow то видны крязобры
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289538
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как этот код скопировать в командную строку foxpro2.6
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289541
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55как этот код скопировать в командную строку foxpro2.6
Скопируй в буфер обмена, Кликни на иконку (левый верхний угол) - Изменить - Вставить
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289552
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В досе и виндовсе разные кодовые страницы, т.е. код буквы "Ж" разный, поэтому если там код досовский, то в виндовсе кракозябра показывается. Ты мог еще накосячить в коде, если набирал его например в блокноте, где используется виндовская кодировка. Эта проблема касается только русских букв, для английских этой проблемы нет, т.к. у них одинаковые коды в обоих случаях.

Давай так сделаем, замени
Код: sql
1.
inlist(Pol, 'ж', 'Ж')


на
Код: sql
1.
inlist(asc(Pol), 198, 230, 134, 166)


это проверка кода символа в обоих кодировках. Так должно работать на кракозябрах.
т.е. вместе будет
Код: sql
1.
SET FILTER TO (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(asc(Pol), 198, 230, 134, 166))) .AND.(DATW>={^2016-01-01}.AND.DATW<={^2016-01-15}).AND.SRDOOP>0
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289574
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В FOXPRO2.6 почему то не работают вот такое {^2016-01-01}

Добавил в код
SET FILTER TO (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(asc(Pol), 198, 230, 134, 166))) .AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0

Заработало, показывает через brow все русские символы и кол-во 86
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289587
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Заработало, показывает через brow все русские символы и кол-во 86
Поздравляю.
dmr55В FOXPRO2.6 почему то не работают вот такое {^2016-01-01}
Там по другому даты задавались, кажется так {2016-01-01} не помню точно.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289594
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помощь

198, 230, 134, 166 это вроде кодировок?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39289598
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Спасибо за помощь

198, 230, 134, 166 это вроде кодировок?
Это коды символов 'Ж' и 'ж' в виндовсе и в досе
можешь проверить, запусти в VFP6 и foxpro2.6
Код: sql
1.
? asc('Ж'),asc('ж')
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39292801
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже данный запрос не верно считает

SET FILTER TO (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(asc(Pol), 198, 230, 134, 166))) .AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0

1.01.2016 - 31.01.2016
Excel
ж - 109 м - 64
по программе 173

01.02.2016 - 29.02.2016
Excel
ж - 139 м - 64 = 203
по программе 206

1.03.2016 - 31.03.2016
Excel
ж - 132 м - 44 = 176
по программе 262

Чем больше период тем больше разница
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39292956
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже эксель неверно считает.
Код: sql
1.
2.
3.
4.
5.
SET FILTER TO (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(asc(Pol), 198, 230, 134, 166))) .AND.(DATW>={^2016-03-01}.AND.DATW<={^2016-03-31}).AND.SRDOOP>0
count to q for inlist(asc(Pol), 198, 230, 134, 166)
? "ж", q
count to q for !inlist(asc(Pol), 198, 230, 134, 166)
? "м", q


За март:
Код: sql
1.
2.
3.
ж = 171
м = 91
всего 262


просто сделай
Код: sql
1.
brow


попробуй найти хоть одну неправильную запись. Их в марте должно быть 86 по твоим заявлениям.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39293013
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
86 человек это за период 01.01.2016 – 15.01.2016
по январю все совпадает, когда ставлю 01.02.2016 – 29.02.2016 то вручную 203, программой 206,
и тем больше период тем разница больше, т.е. начинается с февраля неправильно и по нарастающей
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39293028
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55по январю все совпадает, когда ставлю 01.02.2016 – 29.02.2016 то вручную 203, программой 206
У меня почему-то 208 за февраль
Почему ты считаешь что твои руки точнее программы работают?
Выгрузи в эксель то что программа сформировала и сверяй со своим экселем
Код: sql
1.
2.
SET FILTER TO (Datp - Datr >= 60 * 365.25 or (Datp - Datr >= 55 * 365.25 and inlist(asc(Pol), 198, 230, 134, 166))) .AND.(DATW>={^2016-02-01}.AND.DATW<={^2016-02-29}).AND.SRDOOP>0
copy To pens022016 type xl5 && выгузка в файл pens022016.xls


Найди в этой выгрузке лишнее, то чего не должно быть. Раз программа дает больше, то там должно быть лишнее.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39293129
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1
Сравнил период с 01.02.2016 - 29.02.2016
Экспортировал из vfoxpro запросом sql
SELECT * FROM kartwib WHERE ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))))

И ОТОБРАЛ С ПОМОЩЬЮ ФОРМУЛЫ
=РАЗНДАТ(E2;Q2;"y")&"г."&РАЗНДАТ(E2;Q2;"ym")&"мес."&РАЗНДАТ(E2;Q2;"md")&"дн."
В E2 – ДАТА РОЖДЕНИЯ
В Q2 – СТОИТ ТЕКУЩАЯ ДАТА
и также
Srdoop - убрал нули
Datw - выбрал весь февраль 2016
ПОЛУЧИЛОСЬ М - 64 + Ж - 139 = 203

2
ПРОГРАММА - 206

3
ВЫГРУЖЕННЫЙ ФАЙЛ 208

4
СРАВНИЛ 1 И 3 ВАРИАНТЫ
Эти не вошли в 1вариант
nib=4069 11/17/1928 ж
nib=4085 05/02/1922 ж
nib=4350 04/04/1952 м
nib=4381 07/09/1939 м
nib=500641 03/02/1953 ж


в vfoxpro посчитал кол-во ячеек 21896
Экспортируется вся таблица всего 16384

ВЗЯЛ ВЕСЬ 2016год
В программе 885
В файле 888
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39293132
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql запрос тоже дает 888
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39293144
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все таки хотелось бы проверить Excel формулой, как можно выгрузить в Excel все 21896строк
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39293176
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все проверенно отткрыл просто через excel dbf файл - посчитал 888
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39293178
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55как можно выгрузить в Excel все 21896строк
Код: sql
1.
copy To pens type xl5
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39293191
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в этом запросе он выгружает не все, точнее 16384

В программе в результате - 885
В программе в выгруженном файле PENS0220 - 888

Скорее всего мне не реально найти эти 3
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39293201
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55в этом запросе он выгружает не все, точнее 16384
VFP9 все выгружает, как я понял ты DBF экселем открыл, по сути тоже самое.

dmr55Скорее всего мне не реально найти эти 3
У тебя ID есть? Уникальный идентификатор записи.
Если есть, то сортируешь обе таблицы по возрастанию ID, затем копируешь вторую рядом с первой и пишешь формулу "=A2=F2" где A колонка с ID первой, F - ID второй, дальше просто ищи строку где будет "ЛОЖЬ"
Можешь вместо ID отсортировать по дате рождения. Дальше также.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39293207
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про сравнение все понятно

Когда я запускаю программу и задаю ее период весь 2016 год и тут-же сохраняет в Excel файл - в нем 888 а дальше программа запускается с результатом уже 885
...
Рейтинг: 0 / 0
121 сообщений из 121, показаны все 5 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]