Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.056 c
2-1344342520
Andrey K
2012-08-07 16:28
2013.03.22
Возведение в квадрат


2-1342464470
vlk32
2012-07-16 22:47
2013.03.22
Проверка корректности ссылки на объект


15-1346704137
Rouse_
2012-09-04 00:28
2013.03.22
Ну собственно хвалюсь :)


2-1329483465
vasa
2012-02-17 16:57
2013.03.22
xml


15-1344717005
Юрий
2012-08-12 00:30
2013.03.22
С днем рождения ! 12 августа 2012 воскресенье





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский