Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.27;
Скачать: CL | DM;

Вниз

Не получается запрос по двум таблицам   Найти похожие ветки 

 
vcv   (2003-01-06 17:55) [0]

Народ! Помогите сделать запрос или выяснить, что это невозможно.
Задача такая:
Есть две таблицы (DBase или Paradox), в первой хранятся, к примеру, наименования налогов (поля ID, Title), во второй - ставки на конкретные даты (поля ID, Date, Rate).
То есть, например, если в декабре 2002 ставка по конкретному налогу была изменена, во второй таблице появляется запись:
<ID_налога>, "01.12.2002", <ставка>

Хочется получить выборку одним запросом на конкретную дату с полями Title, Rate.
Если отчетный месяц у нас, к примеру, январь 2003, а записи во второй таблице за январь нет, берутся ставки за ближайший ранний месяц.

Двумя связанными TQuery сделать получается легко. А можно ли одним?


 
Сергєєв Володимир ©   (2003-01-06 18:30) [1]

Не знаю, На МежОснове (англ. InterBase) это все легко можно было сделать на хранимых процедурах. Да и третий диалект - это сила. Попробуй

SELECT
TABLE1.ID,
TABLE1.TITLE,
MAX(TABLE2.DATE),
TABLE2.RATE
FROM
TABLE1,
TABLE2
WHERE
(TABLE2.ID = TABLE1.ID)

Не уверен, что проканает. Но это только если те требуется взять все налоговые ставки "прямо сейчас". А если у тя будет запись во второй таблице с датой позже, чем "сейчас", то фигня выйдет.


 
asmith   (2003-01-06 18:32) [2]

Можно, почитай "Heterogeneous joins" в Local SQL Help


 
vcv   (2003-01-06 19:25) [3]

To Сергєєв Володимир:
Это было бы очень просто если бы не ограничения LocalSQL.
На подобную конструкцию он требует явного указания GROUP BY
"GROUP BY is required when both aggregate and non-aggregate fields are used in result set." А при наличии GROUP BY начинает ругаться "When GROUP BY exists, every simple field in projectors must be in GROUP BY". И все, приехали. Убрать поле Rate из запроса я не могу, оно именно и нужно, и указать его в GROUP BY тоже нельзя, тогда получается куча групп, каждая из одной записи, ставка-то постоянно разная. И обмануть, поставив место поля Rate какую-нибудь формулу не удалось. "Expressions in group by are not supported." :-(

To asmith:
При чем тут "Heterogeneous joins"? База одна, никаких гетерогенных связей не надо.


 
Сергєєв Володимир ©   (2003-01-06 19:43) [4]

Че-то я не понял, кто хочет GROUP BY ? И на фиг он ему ? Хотя, кто его знает. А попробуй неявно при помощи ORDER BY.


 
vcv   (2003-01-08 08:16) [5]

Борландовский LocalSQL хочет, если в запросе есть агрегантые функции.

Спасибо за внимание, вопрос уже снят.
Решилось подобным запросом:
select ID,Title,ratesval."Date",Rate,Formula from rates join ratesval on (rates.ID=ratesval.RateID)
where CAST(ratesval.RateID as CHAR(10))||CAST(ratesval."Date" as CHAR(10)) in
(
select CAST(ratesval.RateID as CHAR(10))||CAST(MAX(ratesval."Date") as CHAR(10))
from ratesval
where ratesval."Date"<="01.01.2002" group by RateID
)
order by rates.Title


 
Johnmen ©   (2003-01-08 09:11) [6]

>Сергєєв Володимир © (06.01.03 18:30)
>...Да и третий диалект - это сила...

"В чем сила, брат ?"


 
Johnmen ©   (2003-01-08 10:00) [7]

Так проще и быстрее :
SELECT A.id, A.tit, B.d, B.s
FROM T1 A, T2 B
WHERE (A.id=B.id) AND
(B.d IN (SELECT MAX(d)
FROM T2
WHERE (id=A.id) AND (d<="01.01.2002")))
GROUP BY A.id, A.tit, B.d, B.s




Страницы: 1 вся ветка

Текущий архив: 2003.01.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
1-86933
ska
2003-01-10 18:08
2003.01.27
Индикация данных в цикле


3-86726
TTCustomDelphiMaster
2003-01-08 22:07
2003.01.27
Подсчет суммы в выделенных строках DBGrid


1-86834
gez
2003-01-18 15:32
2003.01.27
Помогите с гридом


1-86891
Le!
2003-01-16 10:41
2003.01.27
Народ помогите!


1-86763
Th
2003-01-16 20:11
2003.01.27
Работа с TScrollBox