Форум: "Базы";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];
ВнизПомогите с запросом Найти похожие ветки
← →
Maxxx (2003-05-26 07:15) [0]Здравствуйте Уважаемые Мастера!
Есть таблица с начислениями абонентов. В ней храниться код абонента, дата начисления, сумма начисления. Как мне получить дату последнего начисления и сумму последнего начисления?
я делаю:
select code, max(date) from table
group by code
получаю список абонентов с последней датой.
Как получить сумму, соответсвующей этой дате?
Спасибо.
← →
Наталия (2003-05-26 07:51) [1]Может, так:
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
← →
Maxxx (2003-05-26 07:58) [2]А решения без вложенного запроса существуют?
← →
Zacho (2003-05-26 08:57) [3]
> 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.
← →
Johnmen (2003-05-26 10:18) [4]
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 10:23) [5]
> Johnmen © (26.05.03 10:18)
А зачем еще и внутренний джоин ?
Имхо, вполне достаточно SELECT * FROM TABLE WHERE D=(SELECT MAX(D) FROM TABLE)
← →
Johnmen (2003-05-26 10:44) [6]>Zacho © (26.05.03 10:23)
>А зачем еще и внутренний джоин ?
Просто попробуй написать запрос в ключе "вполне достаточно ...", причем обрати внимание, что надо для всех абонентов...:)
← →
Zacho (2003-05-26 10:49) [7]
> Johnmen © (26.05.03 10:44)
Да, согласен, сначало не обратил внимания.
← →
Yuriy Der (2003-05-27 04:57) [8]А если было несколько начислений с последней датой ?
Правильнее запрос делать так:
select date, sum(code)
from table
where date in (select max(date) from table)
group by date;
← →
Yuriy Der (2003-05-27 05:02) [9]Прошу, прощения не "in", а "=" !!
select date, sum(code)
from table
where date = (select max(date) from table)
group by date;
← →
Maxxx (2003-05-27 06:31) [10]Дело в том, что этот запрос будет вложенный и возвращать в нем надо одно поле.
← →
off (2003-05-27 07:44) [11]До боли знакомый вопрос!!!
← →
Johnmen (2003-05-27 10:13) [12]>Yuriy Der (27.05.03 04:57)
>А если было несколько начислений с последней датой ?
Будут выведены все эти начисления, что полностью соответствует логике корректного ответа на вопрос.
А тот запрос, что ты привел, ничего общего с решением вопроса не имеет...:)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c