powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
25 сообщений из 121, страница 2 из 5
Выборка из БД мужчин от 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
25 сообщений из 121, страница 2 из 5
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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