Текущий архив: 2008.03.02;
Скачать: CL | DM;
Вниз
Хитрый запрос из связанных таблиц Найти похожие ветки
← →
Mig (2007-10-16 09:17) [0]Добрый день! Не могу придумать как осуществить следующее и можно ли вообще это сделать в запросе? В главной таблице-данные клиента, в подчинённой-даты его явок. Нужно взять данные клиента и его последнюю явку. А второй вариант сложнее:надо взять дату его предпоследней явки и дату последней. Надеюсь на помощь.
← →
Sergey13 © (2007-10-16 09:32) [1]> [0] Mig (16.10.07 09:17)
Ну, второй случай немного посложнее, а в первом то что напрягает? Простейший запрос с max.
Для второго случаяselect client, max(data),
(select max(data) from table_date where КЛИЕНТ=:client and data<(select max(data) from table where КЛИЕНТ=:client) ) as data_predposlednja
from table_clients tc,table_date td
where tc.client=td.client
нечто вроде такого.
← →
ЮЮ © (2007-10-16 09:34) [2]>Sergey13 © (16.10.07 09:32) [1]
И где жн здесь данные из table_clients ?
Что-то вроде (в IB, прости, не очень силен)
SELECT
c.*, Select MAX(Date) LastDate FROM Javki j WHERE j.Client = c.Id
FROM Сlients c
За Javki тоже извени - не моя предметная область :)
← →
Sergey13 © (2007-10-16 09:55) [3]> [2] ЮЮ © (16.10.07 09:34)
> И где жн здесь данные из table_clients ?
Ну это же болванка, а не рабочий запрос. Например такselect tc.client_name, max(td.data),
и далее без изменений.
← →
Anatoly Podgoretsky © (2007-10-16 10:00) [4]TOP 2
← →
ЮЮ © (2007-10-16 10:02) [5]> и далее без изменений.
Не верится, что такое без GROUP BY будет работать.
select tc.client_name, max(data)
from table_clients tc,table_date td
where tc.client=td.client
← →
Sergey13 © (2007-10-16 10:14) [6]> [5] ЮЮ © (16.10.07 10:02)
Он же выведет 1 строку.
Хотя я забыл ограничить вывод одним клиентом
where tc.client=:client
Если надо по группе клиентов, разумеется без group by не обойтись.
← →
Маша Шрайбер © (2007-10-16 10:24) [7]>> ЮЮ © (16.10.07 10:02) [5]
>> Не верится, что такое без GROUP BY будет работать.
Совершенно верно, не будет.
← →
ЮЮ © (2007-10-16 10:36) [8]> разумеется без group by не обойтись.
Отчего же. Разве так как в [2], а точнее (по синтаксису) так не работает?
SELECT
c.*,
(SELECT MAX(Date) LastDate FROM Javki j WHERE j.Client = c.Id),
(как в [1], но в where связка таблиц, а не параметр)
FROM Сlients c
Правда, наверное и в IB тоже, запрос в запросе - трудоемкая оперциия и все-таки следует ограничивать выборку из Сlients.
← →
Sergey13 © (2007-10-16 10:43) [9]> [8] ЮЮ © (16.10.07 10:36)
> Отчего же.
Я писал про свой вариант, в твоем будет работать и без группировки. Хотя я уже не уверен, будет ли работать мой вариант с группировкой с учетом наличия и функции и подзапроса на вторую дату. Проверять лень.
← →
ЮЮ © (2007-10-16 10:43) [10]А, кстати, в IB возможна конструкция
SELECT FROM
TableName t
JOIN StoredProcedureName p ON t.Id = p.Client
???
← →
Sergey13 © (2007-10-16 10:57) [11]> [10] ЮЮ © (16.10.07 10:43)
> ???
Х.З. Я не пробовал.
← →
Маша Шрайбер © (2007-10-16 11:44) [12]>> ЮЮ © (16.10.07 10:43) [10]
>> А, кстати, в IB возможна конструкция
Возможна. Но есть нюансы в типе соединения.
Кому интересно - ищите статью на ibase.ru
← →
Mig (2007-10-17 09:19) [13]Всем спасибо за ответы.
А вот Немного другая ситуация для запроса:
В главной таблице-данные клиента, в подчинённой-даты его явок. Нужно взять данные клиента, последнюю явку и значение поля Field в день его последней явки.
Т.е. клиент
1 Иванов
2 Петров
Явки:
1 10.10.2000 значение в Field=20
1 10.10.2009 10
т.е. для Иванова надо взять 2 сртроку этой таблицы
← →
ЮЮ © (2007-10-17 09:46) [14]>А вот Немного другая ситуация для запроса:
ситуация абсолютно та же. И принципы "соединения таблиц" те же.
SELECT
c.*,
(
SELECT * FROM Javki j
WHERE
(j.Client = c.Id) and
(j.Date = (select max(data) from Javki where Client = j.client))
)
FROM Сlients c
P.S. Моё отношения к "вложенным" запросам ты уже знаешь :)
← →
Mig (2007-10-17 09:53) [15]>ЮЮ © (17.10.07 09:46) [14]
Пробовала так. Во-первых без группировки это не идёт, а с группировкой ругается на where.
← →
ЮЮ © (2007-10-17 09:59) [16]>Пробовала так. Во-первых без группировки это не идёт,
Ну так покажи, каким получился запрос по subj-евой проблеме.
← →
Mig (2007-10-17 10:05) [17]>ЮЮ © (17.10.07 09:59) [16]
Продолжу завтра. Сегодня некогда. До связи...
Страницы: 1 вся ветка
Текущий архив: 2008.03.02;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.017 c