Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизПомогите с запросом Найти похожие ветки
← →
Дмитрий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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.073 c