powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как правильно сделать запрос по датам
20 сообщений из 20, страница 1 из 1
Как правильно сделать запрос по датам
    #32601850
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте ALL
вопрос такой есть база оплаты pay_v.dbf
с полями data_o(d), nr(n 5), name(c 20), sum(10,2)
какой запрос я должен сделать, чтобы
мне заменить оплату до определенного числа
т.е.
nr name data_o sum
3 петя 11.11.2003 12.01
4 василь 12.11.2003 13.01
22 миша 11.11.2003 2.01
3 петя 30.11.2003 11.22
4 василь 30.11.2003 14.55
4 василь 02.12.2003 16.22
3 петя 03.12.2003 14.44
мне нужно сложить все платежу до 1.12.2004 по nr
должно получится
nr name data_o sum
22 миша 01.12.2003 2.01
4 василь 01.12.2003 27.56
4 василь 02.12.2003 16.22
3 петя 03.12.2003 14.44
3 петя 01.12.2003 23.23

не получается
Заранне спасибо
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32601871
malec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините, таки я не понял Вам нужно сложить или заменить???

Если можно конкретней задаче поставь пожалуйста.
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32601983
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сложить всё, что было до 01.12.2003 включительно и сумме присвоить эту дату, позже - не трогать? Так? И ещё - по какому полю суммировать?
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32601992
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне нужно упаковать базу до 01.01.2004г.
т.е. там где встречается поле nr (например со значением 3) до 01.01.2004г. слаживалось и удалялось оставалась итоговая симма. на 01.01.2004г.
в итоге общая сумма на 01.01.2004г. плюс то, что платили после 01.01.2004г.
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32602070
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT ALL ;
         Old.Nr, Old.Name, {^ 2004 . 01 . 01 } AS Data_O, SUM(Old.Sum) AS Sum ;
      FROM Pay_V AS Old INTO DBF Pay_New ;
      WHERE Old.Data_O<{^ 2004 . 01 . 01 } ;
      GROUP BY  1 , 2  ;
   UNION ALL ;
      SELECT New.Nr, New.Name, New.Data_O, New.Sum ;
            FROM Pay_V AS New ;
            WHERE New.Data_O>={^ 2004 . 01 . 01 } ;
   ORDER BY  1 , 2 
Не совсем красиво наличие nr и name (если это - реальная таблица)...
И не давай имена полям, совпадающие со служебными словами!
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32602284
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT ALL ;
Old.Nr, Old.Name, {^2004.01.01} AS Data_O, SUM(Old.Sum) AS Sum ;
FROM Pay_V AS Old INTO DBF Pay_New ;
WHERE Old.Data_O<{^2004.01.01} ;
GROUP BY 1,2 ;
UNION ALL ;
SELECT New.Nr, New.Name, New.Data_O, New.Sum ;
FROM Pay_V AS New ;
WHERE New.Data_O>={^2004.01.01} ;
ORDER BY 1,2
-----------------------------------------------
В ДАННОМ КОДЕ У МЕНЯ МЕНЯЕТЯ ТОЛЬКО ДАТА СТАНОВИТСЯ 2004.01.01
А МНЕ НУЖНО ЧТОБЫ ВСЕ ПЛАТЕЖИ ДО 2004.01.01 СУМИРОВАЛИСЬ И ПОЛУЧАЛИСЬ ОДНОЙ СУММОЙ И УДАЛЯЛИСЬ ОСТАВАЛАСЬ ИТОГОВАЯ СУММА, А ОПЛАТА КОТОРОЯ ПРОХОДИЛА ПОСЛЕ 2004.01.01 ШЛА БЕЗ ИЗМЕНЕНИЯ.
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32602842
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CAPSLOCK ВЫКЛЮЧИ, ДА!
"В данном коде" суммируется всё, что было до 01.01.2004, по плательщикам ! Платежи после указанной даты не изменяются!
Или тогда объясни толком, что в твоём понимании означает:
т.е. там где встречается поле nr (например со значением 3) до 01.01.2004г
Имя плательщика ничего не значит???
P.S. Я загнал в табличку цифирки из твоего примера:
nr name data_o sum
3 петя 11.11.2003 12.01
4 василь 12.11.2003 13.01
22 миша 11.11.2003 2.01
3 петя 30.11.2003 11.22
4 василь 30.11.2003 14.55
4 василь 02.12.2003 16.22
3 петя 03.12.2003 14.44
и получил то, что ты хотел (только сортировка другая - нормальная):
nr name data_o sum
22 миша 01.12.2003 2.01
4 василь 01.12.2003 27.56
4 василь 02.12.2003 16.22
3 петя 03.12.2003 14.44
3 петя 01.12.2003 23.23
P.P.S. И не давай полям имена, совпадающие со служебными словами!
P.P.P.S. Удаление сам сделаешь? ;-)
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32602940
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CAPSLOCK выключил!
"В данном коде" суммируется всё, что было до 01.01.2004, по плательщикам!
а вот и не сумируется он отлько переписывает даты

Платежи после указанной даты не изменяются! - согласен
Или тогда объясни толком, что в твоём понимании означает:
-----------------------------
т.е. там где встречается поле nr (например со значением 3) до 01.01.2004г
---------------------
до 01.01.2004г. нужно сумировать в итоговую а после 01.01.2004 не трогать
т.е. (как бы исходный остаток на 01.01.2004г. )


Имя плательщика ничего не значит???
"да" уникальное поле nr

--------------------------
P.P.S. И не давай полям имена, совпадающие со служебными словами!
P.P.P.S. Удаление сам сделаешь? ;-)
--------------------------
dbf- не мой не я создавал, меня просто попросили обрезать базу.
Заранне спасибо
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32603316
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот и не сумируется он отлько переписывает даты
А вот и суммируется! :-)
Убираем "несущественные" имена... Может поможет... :-)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT ALL ;
         Old.Nr, {^ 2004 . 01 . 01 } AS Data_O, SUM(Old.Sum) AS Sum ;
      FROM Pay_V AS Old INTO DBF Pay_New ;
      WHERE Old.Data_O<{^ 2004 . 01 . 01 } ;
      GROUP BY  1  ;
   UNION ALL ;
      SELECT New.Nr, New.Data_O, New.Sum ;
            FROM Pay_V AS New ;
            WHERE New.Data_O>={^ 2004 . 01 . 01 } ;
   ORDER BY  1 
P.S. Насчет названий плательщиков - я бы уточнил у заказчика, а то бред какой-то получается. Впрочем, если nr - это код плательщика, то оставь всё, как в первом примере, только измени "AS Sum" на "AS Sum_" и "New.Sum" на "New.Sum AS Sum_" (чем чёрт не шутит, потом переименуешь). Кстати, а заказчику "архив" не нужен?
P.P.S. Если не получается - дай "кусочек" Pay_V на пробу...
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32604317
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот и суммируется! -- сумируется так согласен
SELECT ALL ;
Old.Nr, {^2004.01.01} AS Data_O, SUM(Old.Sum) AS Sum ;
FROM Pay_V AS Old INTO DBF Pay_New ;
WHERE Old.Data_O<{^2004.01.01} ;
GROUP BY 1 ;
UNION ALL ;
SELECT New.Nr, New.Data_O, New.Sum ;
FROM Pay_V AS New ;
WHERE New.Data_O>={^2004.01.01} ;
ORDER BY 1
************************
но мне нужно и поле name , а оно теряется в этом запросе.
***************
подставляю как написали в первом примере остается поле name
но суммы не сумируются

вот база
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32604324
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот еще дату в этой базе нужно например упаковать на 01.01.2003
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32604397
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще в этой базе я поле name переименовал в n_p
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32604520
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уникальное поле nr
А теперь говоришь, что тебе имя плательщика нужно :-(
Так тебе по nr , по name или по nr+name суммировать? Ты уж определись как-нибудь!
Другими словами могут у тебя быть записи типа:
1 Миша
1 Петя
3 Вася
3 Петя
Если да , то как ты хочешь суммировать по nr=1, если при nr=1 разные имена?
Тебе нужна другая дата для "упаковки"? Ну так замени {^2004.01.01} на переменную, а ей присваивай какие хочешь значения!
авторА еще в этой базе я поле name переименовал в n_p
Дык! Предлагаешь мне пример SELECT'a переписать?
Кстати, почему-то твой zip не хочет закачиваться :-( Если хочешь, брось его мне на мыло.
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32604793
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скачал... Не надо по почте...
Всё! Забыли про Nr раз и навсегда! Единственно непонятный момент - какое значение ты присвоишь Nr в "упакованных" записях (там, где Nr будет равно 0)...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ldData_O={^ 2004 . 01 . 01 }
SELECT ALL ;
         Old.Name, Old.Nr-Old.Nr AS Nr, ldData_O AS Data_O, SUM(Old.Sum) AS Sum ;
      FROM Pay_V AS Old INTO DBF Pay_New ;
      WHERE Old.Data_O<ldData_O ;
      GROUP BY  1  ;
   UNION ALL ;
      SELECT New.Name, New.Nr, New.Data_O, New.Sum ;
            FROM Pay_V AS New ;
            WHERE New.Data_O>=ldData_O ;
 ORDER BY  1 
А зачем name превратилось в n_p и стало цифрами в символьном поле?
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32604877
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зачем name превратилось в n_p и стало цифрами в символьном поле?
n_p это уникальный код берется "id- имя" с другой таблицы
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32604879
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nr в "упакованных" записях (там, где Nr будет равно 0).
я же говорю, что nr это уникальное поле и не может быть равна = о
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32604905
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно... Последний раз...
nr это уникальное поле и не может быть равно = 0
Чему оно должно быть равно в записях с суммами на заданную дату?
n_p это уникальный код
На заданную дату нужно суммировать цифры по плательщику ?
Раз у тебя столько полей "уникально", то по ним и суммируем! Если такой подход тебя не устраивает, то твоя задача лишена смысла... Или теряешь одно из полей...
В общем, если не в облом, возьми тот образец, что ты сюда выложил, сделай из него ручками то, что нужно твоему заказчику и выложи сюда... Может так пробьемся?
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32605081
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не в облом, только я сократил записи до 30
--------------------------------------------------
nr это уникальное поле и не может быть равно = 0 --- ДА

Чему оно должно быть равно в записях с суммами на заданную дату?
т.е. если nr =3 то и на заданную дату оно должно быть 3
--------------------
n_p это не уникальный код - он должен быть равен последней записли из выбранных записей с 2002г. т.е. ЭТО Я неправильно сформулировал ИЗВЕНИ ТЫ ПРАВ
data_o nr n_p sum
11.11.2002 3 3 10.10
12.11.2002 3 4 12.23
11.01.2003 3 6 12.33

на дату 01.01.2003г.
должно быть
data_o nr n_p sum
01.01.2003 3 4 22.33
11.01.2003 3 6 12.33
------------------------------------
На заданную дату нужно суммировать цифры по плательщику? НЕТ ПО NR

В общем, если не в облом, возьми тот образец, что ты сюда выложил, сделай из него ручками то, что нужно твоему заказчику и выложи сюда... Может так пробьемся? НАДЕЮСЬ
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32606433
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопросы продолжаются... ;-)
Что такое "последняя запись" - физически последняя или запись с максимальной датой для данного nr ?
P.S. Конечно, может быть это одно и то же, но перестраховаться не помешает :-) Кто знает, как эта база заполнялась...
...
Рейтинг: 0 / 0
Как правильно сделать запрос по датам
    #32606473
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что такое "последняя запись" - физически последняя или запись с максимальной датой для данного nr?

"последняя запись" - - это физиччески последная запись
для данного nr до определенного числа в нашем случае до 01.01.2003г.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как правильно сделать запрос по датам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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