Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 14.09.2010
Сообщений: 4

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

14.09.2010, 17:41. Показов 1026. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.09.2010, 17:41
Ответы с готовыми решениями:

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

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

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

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

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

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

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

последние минимальные цены (по поставщику? по продукту? по дате? последние внесенные?)
0
0 / 0 / 0
Регистрация: 12.09.2010
Сообщений: 29
14.09.2010, 18:55
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
0 / 0 / 0
Регистрация: 14.09.2010
Сообщений: 4
15.09.2010, 00:32  [ТС]
Code
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
Этот запрос выдает:
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
0 / 0 / 1
Регистрация: 21.06.2010
Сообщений: 201
15.09.2010, 01:58
Что-то типа этого может помочь, хотя можно и оптимизировать )
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
0 / 0 / 0
Регистрация: 14.09.2010
Сообщений: 4
16.09.2010, 21:20  [ТС]
Спасибо. Оптимизировать можно до 4 запросов.
На sql.ru подсказал (c)VIG, как сделать.

А что на счет функции CURRENT()? Есть такая в каких-нибудь СУБД?
0
0 / 0 / 1
Регистрация: 21.06.2010
Сообщений: 201
16.09.2010, 22:53
Вряд ли, т.к. в одном запросе может быть SELECT MAX(a), MIN(a) с разными )
А решение можно увидеть? наверное, JOIN ON (SELECT ...)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.09.2010, 22:53
Помогаю со студенческими работами здесь

Нужна помощь!!! Вопрос знатокам VB!!!
Добрый День! Столкнулся с проблемой - прога перестала работать под 98 и т.п. - под XP,2K и т.п. работает без проблем. Возникает...

Вопрос по SQL
например мы имеем таблицу с 5 полями. Есть 5 критерием отбора записей. Необходимо вывести те записи в которых выполняются 2 любых условия...

Вопрос по SQL
Срочно помогите! не знаю как написать запрос на обновление таблицы :( необходимо: в таблице Т изменить поле С1 на значение...

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru