Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];




Вниз

Можно ли сделать такой запрос: 


Владий   (2003-08-11 09:50) [0]

Есть таблица с договорами. По ним идут перечисления, но не каждый день. Нужно выводить в таблицу таким образом, чтоб если ны было перечисления на дату, то писалось бы значение, предыдущего перечисления. И так по каждому договору...

Так можно сделать?

Хорошей Удачи!
Владий // ICQ: 47659886



Соловьев   (2003-08-11 09:56) [1]

какая СУБД?



Hawk2   (2003-08-11 10:06) [2]

И структуру таблиц неплохо бы узнать?



Владий   (2003-08-11 10:16) [3]

Таблица в Access"ной базе

ID_P - счетчик
GDate - дата перечисления
Contr - Договор
GSum - сумма перечисления

Хорошей Удачи!
Владий // ICQ: 47659886



Владий   (2003-08-11 10:19) [4]

Соответственно, как я понимаю - нужно разсортировать по договору, а потом по датампроверить на наличие записей и если таковой нет, то добавить... Или я не понимаю чего-то?...



Соловьев   (2003-08-11 10:30) [5]

а на какую дату? на текущую тебе?
думаю 2 запроса вида
select *
from table
where gdate=now and contr=:n_dog

и еще один

select *
from table
where contr=:n_dog
order by gdate desc

а в проге
if not query1.isempty then
edit1.text := query1.fieldbyname("gsum").asstring
else
edit1.text := query2.fieldbyname("gsum").asstring



Hawk2   (2003-08-11 10:45) [6]

Я думаю автор имел ввиду другое. Если я правильно понял то в таблице будут записи на каждий день по каждому введенному договору, но чтобы реализовать запрос автора нужно либо в программе делать так чтобы каждый день на каждый договор (если небыло перечислений) отискивалась запись с предидущей сумой и записывалась в поле GSum. Или если работать с уже имеющейся базой то тут не обойтись без промежуточных таблиц. Или может я чего-то не понял?



Владий   (2003-08-11 11:05) [7]

Все правильно. но вот каким образом это все организовать я пока не представляю...



stud   (2003-08-11 11:12) [8]

если выбрать все договора с максимальной датой? по идее получатся договора с текущей датой или последней введенной, те. предыдущей



Hawk2   (2003-08-11 11:17) [9]

Туговато соображаю, вобщем если есть возможность изменить программу, то делай как написал Соловьев, только я думаю здесь нужно использовать второй запрос, чтобы найти последнюю запись с суммой нужного нам договора, ну а потом вставка или апдейт, смотря что нужно. Кстати у тебя записи с договорами каждый день добавляются или в начале месяца? Если каждый день то как, автоматом или вручную? И еще, если все же програмку (которая заводит эти договора) изменить нельзя и приходится работать с чем есть, то наверное всетаки через временные таблицы.



denche   (2003-08-11 13:53) [10]

Вот такой запрос не подойдет???

SELECT t1.Contr, t1.GSum , t1.GDate
FROM tabl AS t1
inner join
(SELECT max(t2.GDate) as GDate, t2.Contr
FROM tabl AS t2
where t2.GDate <= #01/01/2003#
group by t2.Contr
) as t3
on t1.contr = t3.contr
and t1.Gdate = t3.GDate

order by t1.contr


отлажен на Accesse 2000



Владий   (2003-08-11 17:10) [11]

Как я понимаю, мне нужно делать доп. таблицу куда перекидывать данные, вставляя нехватающие строки (ибо перечисления далеко не ежедневны).
Данные все вносятся вручную...

PS. По поводу последнего скрипта - эксес не понимает откуда появились т2 и т3 =/




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.038 c
14-1557           Best Guns             2003-08-10 23:10  2003.09.01  
Безопасен ли The Bat! ?


6-1536            jel                   2003-06-25 10:27  2003.09.01  
IPX и разные сети


1-1415            Zilog                 2003-08-15 15:32  2003.09.01  
как подлинковать сишную библиотек??


1-1432            opoloXAI              2003-08-18 10:10  2003.09.01  
RichEdit.Lines.Count > 460


1-1494            Orange Lim            2003-08-18 09:55  2003.09.01  
Нити