Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с запросом [IB6.x]


Maxxx ©   (2003-05-26 07:15:00) 

Здравствуйте Уважаемые Мастера!
Есть таблица с начислениями абонентов. В ней храниться код абонента, дата начисления, сумма начисления. Как мне получить дату последнего начисления и сумму последнего начисления?

я делаю:
select code, max(date) from table
group by code
получаю список абонентов с последней датой.
Как получить сумму, соответсвующей этой дате?
Спасибо.


Johnmen   (2003-05-27 10:13:00) [1]

>Yuriy Der (27.05.03 04:57)
>А если было несколько начислений с последней датой ?

Будут выведены все эти начисления, что полностью соответствует логике корректного ответа на вопрос.

А тот запрос, что ты привел, ничего общего с решением вопроса не имеет...:)


off   (2003-05-27 07:44:00) [2]

До боли знакомый вопрос!!!


Maxxx   (2003-05-27 06:31:00) [3]

Дело в том, что этот запрос будет вложенный и возвращать в нем надо одно поле.


Yuriy Der   (2003-05-27 05:02:00) [4]

Прошу, прощения не "in", а "=" !!

select date, sum(code)
from table
where date = (select max(date) from table)
group by date;


Yuriy Der   (2003-05-27 04:57:00) [5]

А если было несколько начислений с последней датой ?
Правильнее запрос делать так:

select date, sum(code)
from table
where date in (select max(date) from table)
group by date;


Zacho   (2003-05-26 10:49:00) [6]


> Johnmen © (26.05.03 10:44)

Да, согласен, сначало не обратил внимания.


Johnmen   (2003-05-26 10:44:00) [7]

>Zacho © (26.05.03 10:23)
>А зачем еще и внутренний джоин ?

Просто попробуй написать запрос в ключе "вполне достаточно ...", причем обрати внимание, что надо для всех абонентов...:)


Zacho   (2003-05-26 10:23:00) [8]


> Johnmen © (26.05.03 10:18)

А зачем еще и внутренний джоин ?
Имхо, вполне достаточно SELECT * FROM TABLE WHERE D=(SELECT MAX(D) FROM TABLE)


Johnmen   (2003-05-26 10:18:00) [9]

SELECT A.id, A.s, MAX(B.d)
FROM Table A, Table B
WHERE (A.id=B.id) AND (A.d=(SELECT MAX(C.d) FROM Table C WHERE C.id=A.id))
GROUP BY A.id, A.s


где id - код абонента, s - сумма начисления, d - дата начисления.


Zacho   (2003-05-26 08:57:00) [10]


> Maxxx (26.05.03 07:15)

Примерно так:
SELECT ... FROM TABLE WHERE DATE=(SELECT MAX(DATE) FROM TABLE)

> Наталия © (26.05.03 07:51)

Насколько мне известно, такой синтаксис IB не поддерживает.

> Maxxx (26.05.03 07:58)

В IB 6.x - нет, разве что хранимой процедурой. А в FB - можно с помощью FIRST.


Maxxx   (2003-05-26 07:58:00) [11]

А решения без вложенного запроса существуют?


Наталия   (2003-05-26 07:51:00) [12]

Может, так:
select my_summ
from table
inner join
(select code, max(date) d from table
group by code) as t
on table.code=t.code and table.date=t.d


Наверх

Титульная страница Поиск, карта сайта Написать письмо