![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с запросом [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