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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL запрос, функции работы с датами 
:(
    Опции темы
noober1
Дата 21.3.2011, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



Здравствуйте. Напомните пожалуйста как рабоать с датами.
Имеется

Клиент
++++++++++++++++++++
|     id_client     | ФИО         | 
++++++++++++++++++++
|    ...      |           ...             |  
++++++++++++++++++++

Заказ
++++++++++++++++++++++++++++
|     id     | id_client             |      Дата    |
++++++++++++++++++++++++++++
|    ...      |           ...             |        ...       |
++++++++++++++++++++++++++++

Нужно:
Вывести ФИО клиента который сделал более 2х заказов в марте 2011 года.
PM MAIL   Вверх
ziga
Дата 21.3.2011, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

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



А база какая ?

Код

select k.ФИО
  from Клиент k
 inner join (select z.id_client, count(z.id) as c_count
               from Заказ z 
              where z.ДАта >= to_date('01.03.2010')
                and z.ДАта <= to_date('31.03.2010')
              group by z.id_client) t on t.id_client = k.id_client and t.c_count > 2

PM MAIL   Вверх
Akina
Дата 21.3.2011, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 45
Всего: 454



Цитата(noober1 @  21.3.2011,  10:17 Найти цитируемый пост)
как рабоать с датами

Один из наиболее зависимых от SQL-диалекта вопросов.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
noober1
Дата 21.3.2011, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



База на Access.
ziga, а я что-то и не подумал использовать такие условия для отбора по дате. Я пытался через функцию извленчь из даты месяц и год.

Это сообщение отредактировал(а) noober1 - 21.3.2011, 11:03
PM MAIL   Вверх
Akina
Дата 21.3.2011, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 45
Всего: 454



Разумнее использовать не два сравнения, а один 
Код

WHERE [Дата] BETWEEN #2011-03-01# AND #2011-03-31#



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 21.3.2011, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(Akina @  21.3.2011,  11:16 Найти цитируемый пост)
Разумнее 

я бы предпочел сравнение на строго-меньше первого числа след. месяца.

Мне кажется так железобетоннее, вдруйх к дате и время затешется, мало ведь кто констрейнты на датутаму накурчивает, мол только дата.


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


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



А без INNER JOIN можно както сделать, использую обычное соединение?
PM MAIL   Вверх
Zloxa
Дата 21.3.2011, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(noober1 @  21.3.2011,  13:13 Найти цитируемый пост)
А без INNER JOIN можно както сделать

можно, используя кроелированный скалярный подзапрос. Но нужно ли?
Цитата(noober1 @  21.3.2011,  13:13 Найти цитируемый пост)
использую обычное соединение? 

что не обычного вам кажется в Inner join?


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


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



Zloxa, если не составит труда можете написать этот кроелированный скалярный подзапрос?
PM MAIL   Вверх
Zloxa
Дата 21.3.2011, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Если сможете хоть как-то обосновать необходимость того - пожалуйста.
А так - гадостям учить не склонен.


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


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



Попробовал запросик который любезно написал ziga - не работает.
Аксес не знайет функцию to_date :(
PM MAIL   Вверх
Akina
Дата 21.3.2011, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 45
Всего: 454



Цитата(noober1 @  21.3.2011,  20:20 Найти цитируемый пост)
Аксес не знайет функцию to_date :( 

CDate()



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
noober1
Дата 21.3.2011, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



Спасибо. Теперь работает, но ругается на
Код

and t.c_count > 2

"Не поддерживается выражение объеденения"
Не подскажите в чем проблема?
PM MAIL   Вверх
noober1
Дата 30.3.2011, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



Помогите еще один запросик сделать. 
Нужно получить ФИО агентов, которые не заказывали Электронику. 
Код

SELECT DISTINCT fio, 
FROM agent AS a, zakaz AS z
WHERE a.id_ag=z.id_ag AND type NOT IN
(SELECT id FROM typedetali WHERE name='Электроника');


Естественно, если один агент заказывал Электронику и другие типы товаров, то данный запрос выводит этого агента. Помогите составить запрос, чтобы он такого агента не выводил.
PM MAIL   Вверх
Zloxa
Дата 30.3.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(noober1 @  30.3.2011,  11:34 Найти цитируемый пост)
получить ФИО агентов, которые не заказывали Электронику. 

Код

SELECT fio, 
FROM agent AS a, zakaz AS z,
WHERE a.id_ag=z.id_ag 
group by fio
having count( case when z.type IN (SELECT id FROM typedetali WHERE name='Электроника')  then 1 end) = 0



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


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



Ошибку выдает
Код

Ошибка синтаксиса (Пропущен оператор) в выражении запроса having count( case when z.type IN (SELECT id FROM typedetali WHERE name='Электроника')  then 1 end) = 0

PM MAIL   Вверх
Akina
Дата 30.3.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 45
Всего: 454



Не, Аксессовский SQL такое не съест smile 



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 30.3.2011, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Код

SELECT fio
FROM agent AS a, zakaz AS z,(SELECT id FROM typedetali WHERE name='Электроника')  s
WHERE a.id_ag=z.id_ag 
group by fio
having sum( iif(z.type = s.id,1,0)) = 0



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


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



Zloxa, блин опять не работает ((
Код

Ошибка синтаксиса в предложении FROM 

PM MAIL   Вверх
Akina
Дата 30.3.2011, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 45
Всего: 454



noober1, сделай его подзапрос статическим и впиши как источник.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 30.3.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(noober1 @  30.3.2011,  13:29 Найти цитируемый пост)
не работает 

user posted image


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


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



Сам ступил. действительно работает. спасибо!
PM MAIL   Вверх
noober1
Дата 31.3.2011, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



Блин ребят, последний запросик. Сам уже всю голову обламал как сделать.
Нужно получить ФИО агентов, которые заказывали товары только одного типа.
PM MAIL   Вверх
Zloxa
Дата 31.3.2011, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(noober1 @  31.3.2011,  17:03 Найти цитируемый пост)
заказывали товары только одного типа. 

having count(dsitinct z.type) = 1

Добавлено через 56 секунд
вы, кстати, уверены что задачи для акцесса?


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


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.3.2011

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



Да в аксесс.
Код

SELECT fio
FROM agent AS a, zakaz AS z
WHERE a.id_ag=z.id_ag 
GROUP BY fio
HAVING count (distinct z.itype) =1

Пишет что пропущен оператор в выражении запроса count (distinct z.itype) =1
PM MAIL   Вверх
Zloxa
Дата 31.3.2011, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(noober1 @  31.3.2011,  17:45 Найти цитируемый пост)
Да в аксесс.

Это же домашка какая то, я правильно понимаю?

Задачи на столько типовые, что явно в них видится домашка. Обычно домашние задания предназначены для того чтобы учиться делать правильно. Однако задания, которые вам предложены, в акцессе правильно не делются в силу ограничений платформы. Было бы очень странно, если бы вас изначально учили чесать левое ухо правой рукой через голову. Потому и возникает резонный вопрос, вы действительно используете ту платформу, которая требуется для решения?

По существу... У меня дома акцесс не стоит, завтра на работе покумекаю как эта задачка может решаится с учетом ограничений акцесса


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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