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

Вниз

Помогите с запросом   Найти похожие ветки 

 
Дмитрий2   (2012-07-07 11:56) [0]

Работаю с FB 2.1. нужно составить запрос.
есть Table1 c полями ID(integer), ZN (VarChar 255) - ID(PK)
и связанная с ней по полю Tab1_ID Таблица Table2 с полями ID(integer), dat2(date), Tab1_id(integer), ZN2(VarChar 255)- ID(PK), Tab1_id(FK)

Необходимо составить следующий запрос, чтобы показывал все записи Table1 и все поля этой таблицы плюс поле максимального значения поля dat2 таблицы Table2 для конкретного ID таблицы Table1

Если не понятно описал могу на примере объяснить


 
Дмитрий2   (2012-07-07 12:00) [1]

Поясню на примере
есть список товара, например: ручки, карандаши, краски, альбомы (это значения таблицы Table1).
Для каждого товара фиксируется дата поступления товара в таблице Table2.

так вот в запросе нужен список товара с датой последнего поступления соответствующего товара


 
Давайте будем жрать!   (2012-07-07 12:03) [2]

В учебнике по SQL читай про GROUP BY. Никто тебе запрос не составит, пока ты хотя бы не продемонстрируешь, что сделал сам для решения проблемы.


 
Дмитрий2   (2012-07-07 12:09) [3]


> Давайте будем жрать!   (07.07.12 12:03) [2]

Да всяко пробовал, ну если так принципиально, то вот это не работает
select max(t2.dat2), t1.id,t1.ZN from Table1 t1
left join table2 t2 on t2.Tab1_id=t1.id
group by t1.id,t1.ZN


 
Дмитрий2   (2012-07-07 12:30) [4]

Да еще уточню. В данном запросе еще должно показываться поле t2.zn2


 
Дмитрий2   (2012-07-07 12:32) [5]

Ну и соответственно вот это не работает
select max(t2.dat2),t2.zn2, t1.id,t1.ZN from Table1 t1
left join table2 t2 on t2.Tab1_id=t1.id
group by t2.zn2,t1.id,t1.ZN


 
sniknik ©   (2012-07-07 12:37) [6]

форматирование форевер!
selectt1.id,t1.ZN,t2.dat2fromTable1t1leftjoin(selectid,max(dat2)asdat2fromtable2 groupbyid)ast2ont1.id=t2.id


 
Дмитрий2   (2012-07-07 12:42) [7]


> sniknik ©   (07.07.12 12:37) [6]

Принцип понял
а поле t2.zn2 как вывести?


 
Дмитрий2   (2012-07-07 12:46) [8]

Перефразирую свой вопрос
Таблица Table2 с полями ID(integer), dat2(date), Tab1_id(integer), ZN2(VarChar 255)- ID(PK)

Нужно вывести максимальную дату для каждого Tab1_id и показать поле ZN2, соответствующую этой максимальной дате


 
Дмитрий2   (2012-07-07 12:50) [9]

Возвращаясь к принципу
> Давайте будем жрать!   (07.07.12 12:03) [2]

привожу пример как я делал
select max(t2.dat2),t2.zn2, t2.Tab1_id from table2 t2
group by t2.zn2, t2.Tab1_id
Не работает


 
sniknik ©   (2012-07-07 19:10) [10]

Дмитрий2   (07.07.12 12:42) [7]
> Принцип понял
Дмитрий2   (07.07.12 12:50) [9]
> Возвращаясь к принципу
нафига к нему возвращаться? просто напиши, раз понял.

> Не работает
вот прямо так берет и отказывается? какая наглость... нужно искать того кто его заставит. программиста нанять не пробовал?


 
Кщд   (2012-07-09 09:44) [11]

>Дмитрий2   (07.07.12 12:42) [7]
>Принцип понял
враки

начните с написания запроса с выводом макс. даты взяв за основу "sniknik ©   (07.07.12 12:37) [6]"
пример в студию

пока что видно, что документацию читать не хотите, мозг включать не желаете, примеры не смотрите


 
Inovet ©   (2012-07-09 10:02) [12]

> [6] sniknik ©   (07.07.12 12:37)

А для чего подзапрос?


 
sniknik ©   (2012-07-09 10:12) [13]

чтобы по результату, только нужным id, выбрать всю запись без группировки. там же не нужно одного максимального значения от одной записи и второго от другой, а нужно - одна запись как есть по определенному условию... вот это оно и есть.


 
sniknik ©   (2012-07-09 10:16) [14]

хотя, там запрос не верный... не форматированное сразу не видно. и еще более не понятно тогда, что же он там "понял" вот так сразу, без проб и доп вопросов.


 
Кщд   (2012-07-09 19:05) [15]

>Inovet ©   (09.07.12 10:02) [12]
>А для чего подзапрос?
это не подзапрос

>sniknik ©   (09.07.12 10:16) [14]
дыкть, правильно всё, кроме опечатки id = Tab1_id


 
Inovet ©   (2012-07-09 19:20) [16]

> [15] Кщд   (09.07.12 19:05)
> это не подзапрос

А что это?
Чем хуже будет группировка после соединения, а не до?


 
sniknik ©   (2012-07-09 20:16) [17]

> кроме опечатки id = Tab1_id
и группировки по тому же признаку.

> Чем хуже будет группировка после соединения, а не до?
да ничем. напиши да предложи если можешь, вместо того чтобы вклиниваться в "учебный процесс" с вопросами вида "а почему у вас дважды два не через интегралы? чем они хуже?"... и т.д.
раз волнует, то сам ответь - чем лучше группирована после соединения, а не до?


 
Inovet ©   (2012-07-09 20:47) [18]

> [17] sniknik ©   (09.07.12 20:16)
> то сам ответь - чем лучше группирована после соединения,а не до?

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

> [17] sniknik ©   (09.07.12 20:16)
> напиши да предложи если можешь


> [5] Дмитрий2   (07.07.12 12:32)
> select max(t2.dat2),t2.zn2, t1.id,t1.ZN from Table1 t1
> left join table2 t2 on t2.Tab1_id=t1.id
> group by t2.zn2,t1.id,t1.ZN

select max(t2.dat2), max(t2.zn2), t1.id, max(t1.ZN)
from
 Table1 t1
 left join table2 t2 on t2.Tab1_id=t1.id
group by t1.id


 
sniknik ©   (2012-07-09 21:51) [19]

> Оптимизатору легче индексы применить.
с чего бы это? оптимизатор что в подзапросе "не могёт"?

>> напиши да предложи если можешь
...
не смог... у тебя dat2 от первой записи в группе, а zn2 из середины (например. как агрегаты сложатся... что в значениях), а нужно целиком все из последней по дате записи.


 
Inovet ©   (2012-07-09 22:07) [20]

> [19] sniknik ©   (09.07.12 21:51)
> не смог... у тебя dat2 от первой записи в группе, а zn2 из середины

Ну да, zn2 же по датам разный. Но вопрос не про это поле.

> [19] sniknik ©   (09.07.12 21:51)
> > Оптимизатору легче индексы применить.
> с чего бы это? оптимизатор что в подзапросе "не могёт"?

В связи результата подзапроса с основным запросом (про max я написал выше).


 
sniknik ©   (2012-07-09 22:25) [21]

> Но вопрос не про это поле.
а про какое? странно звучит твой вопрос "почему сделали так, а не вот так?", при том что "вот так" не получается... сначала сделай "как заказано". после так спрашивай.

> В связи результата подзапроса с основным запросом (про max я написал выше).
тебе не с кем поговорить? твой флуд вообще не связан с топиком ветки, это не вопрос, т.к. тебе плевать на ответы (при том, что "потому и спрашиваю", зачем то доказываешь свою "правду матку"), и какой то бред несешь...

но, ладно, пусть в "связи результата подзапроса с основным запросом", оптимизатор что "не могёт"?


 
Inovet ©   (2012-07-09 22:40) [22]

> [21] sniknik ©   (09.07.12 22:25)

Да какую правду-иатку. Поле это zn2 потом в вопросе ТС вылезло, и у тебя в отаете его тоже не было. Но ты прав, не место тут для такого оффтопа.


 
sniknik ©   (2012-07-09 22:48) [23]

> и у тебя в отаете его тоже не было.
когда отвечал его не было, мне нужно было его заранее придумать? но ты то его вставил.



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

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

Наверх




Память: 0.52 MB
Время: 0.092 c
15-1335682929
Валера
2012-04-29 11:02
2013.03.22
Почему не работает TTrackBar.OnExit?


15-1338033251
Bluejohn
2012-05-26 15:54
2013.03.22
Как очистить Event Log?


15-1337757619
alexdn
2012-05-23 11:20
2013.03.22
Php


2-1330876757
TSubject
2012-03-04 19:59
2013.03.22
Ошибка при выполнении запроса в Oracle


15-1330461002
Юрий
2012-02-29 00:30
2013.03.22
С днем рождения ! 29 февраля 2012 среда