Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
3-86680
DC2
2003-01-08 19:54
2003.01.27
Подскажите как сделать поле с числом десятичных знаков больше 4 (


3-86695
S
2003-01-05 12:42
2003.01.27
Вопрос создания таблицы в access?


1-86964
AndreiR
2003-01-17 11:24
2003.01.27
Как изменить цвет фришта в TDateTimePicker е?


4-87189
Stainer
2002-12-09 16:41
2003.01.27
темы рабочего стола


4-87191
Mantic0re
2002-12-11 15:30
2003.01.27
Как раскрасить элементы окна?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский