SQL Поиск цены по дате

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
KibkaloIg
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 22.06.2005 (Ср) 0:24

SQL Поиск цены по дате

Сообщение KibkaloIg » 23.09.2005 (Пт) 10:04

Access

Есть таблица : Дата, Товар, Цена
Нужен запрос который вытащил цены на товар на определенную дату???

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 23.09.2005 (Пт) 10:20

Запрос на цены всех товаров на опр. дату
Код: Выделить всё

select Дата, товар, Цена from имя_таблицы where Дата=#yyyy-mm-dd#

Запрос на цену опр. товар на опр. дату
Код: Выделить всё

select Дата, товар, Цена from имя_таблицы where Дата=#yyyy-mm-dd# and Товар='имя_товара'


Если хочешь научиться использовать язык запросов, сходи сюда:
http://sql-ex.ru/

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Сообщение Al Khamid » 23.09.2005 (Пт) 10:44

№№№
Последний раз редактировалось Al Khamid 27.11.2007 (Вт) 0:47, всего редактировалось 1 раз.

KibkaloIg
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 22.06.2005 (Ср) 0:24

Сообщение KibkaloIg » 23.09.2005 (Пт) 17:54

Увы, друзья мои, это слишком простой ответ.
Или вернее я не правельно задал вопрос.
Поле Дата - это дата начиная с которой действует цена
Например пусть записи в таблице находятся в таком порядке

01/09/05 Хлеб 5руб
05/09/05 Хлеб 10руб
10/05/05 Хлеб 25 руб
02/09/05 Масло 50руб
12/09/05 Масло 60руб
13/09/05 Масло 70руб

Мне нужно узнать цену, скажем на 9 сентября 2005
Как вы можете заметить прямой записи на эту дату нет, значит нужна ближайшая, т. е по хлебу на 5 число, а по маслу на 2 число.

Так вот как составить такой запрос Я идиот! Убейте меня, кто-нибудь!???

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 23.09.2005 (Пт) 20:29

Код: Выделить всё
select GoodId, Price, MAX(Date) as [LastChangeDate]
from MyTable
where date <= #MM/DD/YYYY#
group by GoodId, Price

Кажется, так.

KibkaloIg
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 22.06.2005 (Ср) 0:24

Сообщение KibkaloIg » 23.09.2005 (Пт) 22:20

Увы, это не решение задачи.
Поскольку есть группировка по Price (цене), а цена может менятся в периоде дат меньше или равное MM/DD/YYYY, по этому результатом этого запроса будет несколько записей сразными ценами на конкретный товар
:(

Ну, что не хилая задачка :?:
А кажется такой простой :!:

У кого есть еще варианты :?:



SELECT GoodId, Price, MAX(Date) AS [LastChangeDate]
FROM MyTable
WHERE date <= #MM/DD/YYYY#
GROUP BY GoodId, Price

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 24.09.2005 (Сб) 2:38

Код: Выделить всё
select t1.Price
FROM MyTable AS t1
    INNER JOIN (
        select GoodId, MAX(Date) as [LastChangeDate]
        from MyTable
        where date <= #MM/DD/YYYY#
        group by GoodId, Price
    ) AS t1
WHERE t1.GoodId = t2.GoodId AND t1.Date = t2.LastChangeDate

Просто чуточку подправить надо

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 24.09.2005 (Сб) 3:48

Да, нужно только зачистить в подзапросе лишнюю группировку и вывести наружу товар (а то непонятно, к чему цена относится):
Код: Выделить всё
SELECT SQ.GoodId, T.Price
FROM MyTable T
  INNER JOIN (
    SELECT GoodId, MAX(Date) AS [LastChangeDate]
    FROM MyTable
    WHERE date <= #MM/DD/YYYY#
    GROUP BY GoodId
  ) SQ on (T.GoodId = SQ.GoodId
    AND T.Date = SQ.LastChangeDate)

Если требуется еще и знание того, с какой даты идет последняя цена, то в основной селект-лист добавляешь дату из подзапроса.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 24.09.2005 (Сб) 23:54

:roll: Мда... Чего-то я затупил. И вместо ON написал WHERE, и с именем таблицы напутал. Пойду отсыпаться.

KibkaloIg
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 22.06.2005 (Ср) 0:24

Сообщение KibkaloIg » 25.09.2005 (Вс) 18:03

В Access-е этот вариант не работает.
Приходится разделять запросы. (Так работает)
Синтаксис видно отличается


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList