Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
ВнизВозможно ли реализовать одним запросом на SQL, без использования Найти похожие ветки
← →
_Lucky_ (2005-09-05 18:31) [0]Есть три таблицы, назовем их условно А,Б,В.
Таблица А состоит из:
- ИД
- Название организации
Таблица Б состоит из:
- ИД
- номер счета
- ИД организации
Таблица В состоит из:
- ИД
- дата операции
- сумма операции
- ИД счета
И есть сформированный список, назовем его Х (сформирован тоже SQL запросом), в котором имеется:
- ИД
- дата операции
- сумма операции
- номер счета
А получить нужно следующие:
список операций из списка Х или их ИД, которые являются первой операцией по своему счету.
Т.е. смысл в следующем надо узнать является ли операция из Х первой по счету, ну соответственно у нее будет min (дата операции). Вот только у меня такой запрос составить ну не как не получилось, в голову пришла только ХП, а надо непременно запрос, причем один.
← →
Johnmen © (2005-09-05 18:42) [1]Тип БД, конечно, военная тайна...
← →
_Lucky_ (2005-09-06 13:09) [2]Нет, тип бд не военная тайна, точнее тебя наверное интересует СУБД, так она Oracle, версия 8 кажется, хотя точно не уверен, но что не меньше восьмерки это точно, если надо могу посмотреть.
Хотя когда я постил сообщение я выбирал Oracle, странно.
← →
Sergey13 © (2005-09-06 13:27) [3]На вскидку. Не оптимально наверное.
Добавь поле в свою выборку Х
(select min (дата операции) from B where номер счета=головной запрос.номер счета) as min_Date
По разнице "дата операции" и "min_Date" поймешь - она или нет.
← →
_Lucky_ (2005-09-06 17:55) [4]Вся фишка в том, что никуда и ничего я добавить не могу, у меня есть клиентское место, на котором есть формочка с выборкой Х, но на этой формочке есть фильтр, типа там можно разные поля задать и отфильтровать, а в этом фильтре есть поле "дополнительно", где можно эти поля сравнивать каким нить особенным способом, как выяснилось в этом поле также выполняется SQL код, после чего мной был написан кусочек кода, что-то типа
ID IN (SELECT ID FROM A,B,C WHERE ...) который нормально работал, но он написан для другой задачи, а вот с этой ну не как не получается, вся проблемма именно в определении операции. А оптимальное решение или нет мне не важно, мне надо запускать такую операции раз в месяц.
← →
Sergey13 © (2005-09-07 09:18) [5]2[4] _Lucky_ (06.09.05 17:55)
Ну и попробуй поиграться с моим запросом.
Типа
дата операции <> (select min (дата операции) from B where номер счета=головной запрос.номер счета)
← →
RUYurik (2005-09-08 08:51) [6]Пример для InterBase:
select x.id, min(x.date_O), x.Sum_O, x.Account
from xQuery x
group by x.id, x.Sum_O, x.Account
← →
_Lucky_ (2005-09-08 12:47) [7]
> RUYurik (08.09.05 08:51) [6]
> Пример для InterBase:
>
> select x.id, min(x.date_O), x.Sum_O, x.Account
> from xQuery x
> group by x.id, x.Sum_O, x.Account
Интересно и что он покажет? Это наверное не будет полное решение на сколько я понимаю. По идее, в результате будет
ИД, дата_первой_операции, сумма_первой_операции, номер_счета
ИД, дата_первой_операции, сумма_первой_операции, номер_счета
ИД, дата_первой_операции, сумма_первой_операции, номер_счета
ИД, дата_первой_операции, сумма_первой_операции, номер_счета
.....
ИД, дата_первой_операции, сумма_первой_операции, номер_счета
или я что-то не так понял
← →
Dilmo (2005-09-09 08:23) [8]select X.*
from X a, B b
where a.ID = b.ID
AND a.DATA = (select min(DATA)
from B aa, Б bb
where aa.ACCID = bb.ID
AND bb.ACCNUM = a.ACCNUM)
вроде так, при условии что поле ID в Х является ID в B
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c