Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
cheglow
0 / 0 / 0
Регистрация: 14.09.2010
Сообщений: 4
#1

Вопрос к знатокам SQL. - MS Access

14.09.2010, 17:41. Просмотров 744. Ответов 6
Метки нет (Все метки)

Есть таблица поставок

поставки:
id_produkt id_supplier date price accountable
1 1 12.10.95 25.00 Вася
1 1 14.10.96 27.00 Петя
1 1 11.11.97 26.80 Саша
1 2 24.08.94 24.80 Ваня
1 2 30.11.96 27.10 Дима
1 2 16.12.97 27.10 Олег
2 1 22.12.95 55.00 Петя
2 1 24.10.96 57.00 Дима
2 1 19.11.97 58.00 Алик
2 2 14.12.94 55.00 Иван
2 2 23.10.96 57.00 Петр
2 2 26.12.97 57.00 Леша

Нужно выбрать последние минимальные цены:

1 1 11.11.97 26.80 Саша
2 2 26.12.97 57.00 Леша

Приходится делать 7! последовательных запросов

Есть ли такая функция, положим current(), которая возвращает текущее поле по аналогии с Last() и First()

Тогда можно было бы в 2 запроса сделать

query1:
SQL
1
SELECT id_produkt, id_supplier, MAX(DATE), CURRENT(price), CURRENT(accountable) FROM поставки GROUP BY id_produkt, id_supplier
query2:
SQL
1
SELECT id_produkt, CURRENT(id_supplier), CURRENT(DATE), MIN(price), CURRENT(accountable) FROM query1 GROUP BY id_produkt
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2010, 17:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вопрос к знатокам SQL. (MS Access):

Вопрос к знатокам SQL
Есть таблица - test name id a 1 b 2 c 3 a 0 a 0 b 0 b 0 c 0

Вопрос к знатокам, аксесс +интернет
Приветствую всех! Возник вопрос по возможности работы аксесса с сервером в...

Вопрос по SQL
В базе есть инфа вида: Доход, Месяц. Но не в каждом месяце есть доход. Тогда...

Вопрос по SQL
Допустим мне надо сделать выборку из таблицы продуктов,просроченные продукты ....

SQL в ACCESS вопрос???
Как мне передать значение SQL взятое из определённого поля формы. Я пробую так...

Вопрос по поводу SQL запроса
Добрый день, подскажите пожалуйста в чем может быть проблема: вот такой...

6
InStr
0 / 0 / 0
Регистрация: 12.09.2010
Сообщений: 29
14.09.2010, 18:39 #2
Посмотрите что такое

1 нормализация данных
2 оптимизация запросов
3 вложенные запросы (Where; Having)

ответ придет сам

REM ну и посмотрите еще раз на формулировку запроса самого по себе...

последние минимальные цены (по поставщику? по продукту? по дате? последние внесенные?)
0
InStr
0 / 0 / 0
Регистрация: 12.09.2010
Сообщений: 29
14.09.2010, 18:55 #3
SELECT Sheet1.id_produkt, Max(Sheet1.date) AS MaxOfdate, Min(Sheet1.price) AS MinOfprice, Last(Sheet1.id_supplier) AS LastOfid_supplier, Last(Sheet1.accountable) AS LastOfaccountable
FROM Sheet1
GROUP BY Sheet1.id_produkt;
0
cheglow
0 / 0 / 0
Регистрация: 14.09.2010
Сообщений: 4
15.09.2010, 00:32  [ТС] #4
Код
 
Этот запрос выдает:
1	16.12.1997	24.80	2	Олег
2	26.12.1997	55.00	2	Леша

Мне нужны последние минимальные цены на каждый товар
т.е. сначала выбрать каждый товар(id_produkt) у каждого поставщика(id_supplier), но 
с самой последней ценой (максимальной по дате), а потом выбрать у какого поставщика 
минимальная цена и кто ответственный за поставку (accountable), кому премию выписывать :)

Это нужно, чтобы определить выгодные цены на последний момент

Упрощая таблицу поставок до 8 строк:
id_product	id_supplier	date		price	accountable
1		1		12.10.1995	25.00	Вася
1		1		14.10.1996	27.00	Петя
1		2		24.08.1994	24.80	Ваня
1		2		30.11.1996	27.10	Дима
2		1		22.12.1995	55.00	Петя
2		1		24.10.1996	57.00	Дима
2		2		14.12.1994	55.00	Иван
2		2		23.10.1996	57.50	Петр

за первый проход выбираются последние цены по каждому продукту и поставщику:
Select id_produkt, id_supplier, Max(date), CURRENT(price), CURRENT(accountable) From поставки GROUP BY id_produkt, id_supplier

id_product	id_supplier	date		price	accountable
1		1		14.10.1996	27.00	Петя
1		2		30.11.1996	27.10	Дима
2		1		24.10.1996	57.00	Дима
2		2		23.10.1996	57.50	Петр

За второй проход выбираются минимальные последние цены:
Select id_produkt, CURRENT(id_supplier), CURRENT(date), Min(price), CURRENT(accountable) From query1 GROUP BY id_produkt

id_product	id_supplier	date		price	accountable
1		1		14.10.1996	27.00	Петя
2		1		24.10.1996	57.00	Дима

А запрос 
SELECT Sheet1.id_produkt, Max(Sheet1.date) AS MaxOfdate, Min(Sheet1.price) AS MinOfprice, Last(Sheet1.id_supplier) AS LastOfid_supplier, Last(Sheet1.accountable) AS LastOfaccountable FROM Sheet1 GROUP BY Sheet1.id_produkt;
выберет просто последнюю дату и минимальную цену для каждого продукта, а поставщика и ответственного по тому, которые были введены последними в базу для данного товара: 
1		2		30.11.1996	24.80	Дима
2		2		23.10.1996	55.00	Петр
0
Dirty
0 / 0 / 1
Регистрация: 21.06.2010
Сообщений: 201
15.09.2010, 01:58 #5
Что-то типа этого может помочь, хотя можно и оптимизировать )
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SELECT * 
FROM tab AS t1 
WHERE price=(
 
  SELECT MIN(price) 
  FROM tab AS t2 
  WHERE t1.id_produkt=t2.id_produkt 
    AND t1.id_supplier=t2.id_supplier
  GROUP BY id_produkt, id_supplier
  )
 
  AND [DATE]=(
 
  SELECT MAX(t3.[DATE]) 
  FROM tab AS t3
  WHERE price=(
    SELECT MIN(price) 
    FROM tab AS t4 
    WHERE t4.id_produkt=t3.id_produkt 
      AND t4.id_supplier=t3.id_supplier
    GROUP BY id_produkt, id_supplier
    )
 
  GROUP BY id_produkt
  )
0
cheglow
0 / 0 / 0
Регистрация: 14.09.2010
Сообщений: 4
16.09.2010, 21:20  [ТС] #6
Спасибо. Оптимизировать можно до 4 запросов.
На sql.ru подсказал (c)VIG, как сделать.

А что на счет функции CURRENT()? Есть такая в каких-нибудь СУБД?
0
Dirty
0 / 0 / 1
Регистрация: 21.06.2010
Сообщений: 201
16.09.2010, 22:53 #7
Вряд ли, т.к. в одном запросе может быть SELECT MAX(a), MIN(a) с разными )
А решение можно увидеть? наверное, JOIN ON (SELECT ...)?
0
16.09.2010, 22:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2010, 22:53
Привет! Вот еще темы с решениями:

Вопрос по особенностям ACCESS SQL
В клиенте, в EditBox'ах по нажатию клавиши подставляется наиболе близкое...

Еще вопрос по поводу SQL запроса
Подскажите пожалуйста как решить след. задачу: имеются две таблицы, они не...

Небольшой вопрос по коду SQL, Count и группировке
Аксес 2003. Работаю над курсовой, появилась одна проблема с которой...

Вопрос знатокам SQL
В базе есть инфа вида: Доход, Месяц. Но не в каждом месяце есть доход. Тогда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru