Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1201887318
Dimo444ka
2008-02-01 20:35
2008.03.02
Как сделать распознавание строки?


2-1201770278
S.T.
2008-01-31 12:04
2008.03.02
Возможно в одном запросе заполнить три DBComboBox-а?


2-1202190088
Chebarov
2008-02-05 08:41
2008.03.02
TDbGriid


3-1192099082
9899100
2007-10-11 14:38
2008.03.02
запрос ? :(


2-1202118155
mephisto
2008-02-04 12:42
2008.03.02
Прочитать ячейку в памяти