Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрос из 2х тадлиц 
V
    Опции темы
Ronin08
Дата 19.2.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

Репутация: нет
Всего: 1



Доброго времени суток
Имеется 2 таблицы:
1. org(id, name), id - PK;
2. log (id, org_id, date) id - PK;

необходимо вывести для org.id = log.org_id минималную log.date, максимальную log.date и количество log.org_id 
получится
--------------------------------------------------------------
org_id  | name  | date_min  | date_max  |  count 
-------------------------------------------------------------- 
1          | name1| 21.12.208 | 02.01.2010|  6
--------------------------------------------------------------
2          | name2| ................................


--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
Zloxa
Дата 19.2.2010, 11:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Ronin08 @  19.2.2010,  11:03 Найти цитируемый пост)
необходимо 

Что именно не понятно? Как работает join или как работает group by?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Deniz
Дата 19.2.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Ronin08, а сам пробовал запрос написать? Напиши здесь, мы поправим, если что.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Ronin08
Дата 21.2.2010, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

Репутация: нет
Всего: 1



Код

select org.id,  Min(log.date) as date_min, Max(log.date) date_max, Count(log.date) as count

from org left outer join 
        [log] on org.id = log.org_id 
where org.id in (select log.org_id from [log])

group by org.id

так работает все нормально, но мне надо еще выводить org.name, если я добавлю в select еще org.name, то будет ошибка
Цитата

Column 'org.name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

 Но если добавить в group by помимо org.id еще org.name, то все нормально. 
Просто на самом деле в реальной ХП должно быть 4 join  и выводить надо много полей. так их все и надо указывать в group by? 
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
Zloxa
Дата 21.2.2010, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Ronin08 @  21.2.2010,  01:02 Найти цитируемый пост)
так их все и надо указывать в group by?  

Лучше применить к ним агрегатную функцию типа max, min.

Добавлено через 6 минут и 24 секунды
иногда можно еще можно джойн сделать после группировки
Код

select org.*,s.date_min,s.date_max,s.count 
from org 
inner join (
        select log.org_id,  Min(log.date) as date_min, Max(log.date) date_max, Count(log.date) as count
        from  [log] 
        group by org.id
) s
on s.org_id = org.id

Цитата(Ronin08 @  21.2.2010,  01:02 Найти цитируемый пост)
where org.id in (select log.org_id from [log])

это бред.
Почитай про INNER JOIN


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Ronin08
Дата 21.2.2010, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

Репутация: нет
Всего: 1



Цитата(Zloxa @  21.2.2010,  12:20 Найти цитируемый пост)

Цитата(Ronin08 @  21.2.2010,  01:02 Найти цитируемый пост)
where org.id in (select log.org_id from [log])

это бред.
Почитай про INNER JOIN 


Zloxa, согласен, было еще условие, потом я его убрал и получилось что left join можно заменить inner join.
И еще, наверное, надо  group by org.id заменить на  group by log.org_id!!!
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
Zloxa
Дата 22.2.2010, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Ronin08 @  21.2.2010,  15:01 Найти цитируемый пост)
надо  group by org.id заменить на  group by log.org_id

если ты про мой запрос - да.
издержки копипаста, сорри.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Ronin08
Дата 22.2.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

Репутация: нет
Всего: 1



Zloxa, спасибо за помощь
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.