Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрос на последнюю дату
 
 автор: Diamand   (29.02.2012 в 14:49)   личное сообщение
10 Кб.
 
 

Всем привет

подскажите хочу выбрать последнюю дату по каждому товару

делаю так :

SELECT TOP 1 [Sales Price].[Item No_], [Sales Price].[Currency Code], [Sales Price].[Starting Date], [Sales Price].[Unit Price]
FROM [Sales Price]
ORDER BY [Sales Price].[Starting Date] DESC;


но выводит те товары которые были залиты последними допустим от 12.09.2011 а другие товары с поздней датой не выводит

еще делал так но тж как то не айс


SELECT [Sales Price].[Item No_], [Sales Price].[Sales Code], [Sales Price].[Unit Price], (SELECT MAX([Starting Date])
FROM [Sales Price] AS [Sales1]WHERE [Sales1].[Starting Date] 
 < [Sales Price].[Starting Date] 
AND [Sales1].[Item No_] 
 = [Sales Price].[Item No_]) AS [Prior Date]
FROM [Sales Price];

  Ответить  
 
 автор: Анатолий (Киев)   (29.02.2012 в 14:51)   личное сообщение
 
 

Видимо группировка по товару и MAX по дате.

  Ответить  
 
 автор: Diamand   (29.02.2012 в 15:42)   личное сообщение
 
 

Чет не получилось а можно на моём примере

  Ответить  
 
 автор: Анатолий (Киев)   (29.02.2012 в 17:21)   личное сообщение
 
 

Сначала создаете и сохраняете как "Запрос2":

SELECT [Item No_] As Tovar, MAX([Starting Date]) As MaxDate FROM [Sales Price] GROUP BY [Item No_];


а основной запрос выглядит так:

SELECT [Item No_], [Currency Code], [Starting Date], [Unit Price] FROM [Sales Price]
WHERE EXISTS (SELECT * FROM Запрос2 WHERE ((Запрос2.Tovar = [Item No_]) AND (Запрос2.MaxDate = [Starting Date])));

Можно обойтись и без сохраненного запроса, но пока попробуйте так.

  Ответить  
 
 автор: Diamand   (01.03.2012 в 11:48)   личное сообщение
 
 

Спасибо получилось , ток можно его как то автоматизировать по быстроте , уж очень долготвато в реально бд 20 тыс записей мурыжет ?

  Ответить  
 
 автор: Анатолий (Киев)   (02.03.2012 в 11:49)   личное сообщение
 
 

Ну еще так попробуйте:

SELECT [Item No_], [Currency Code], [Starting Date], [Unit Price] FROM [Sales Price]
WHERE ([Starting Date] = DMax('[Starting Date]', '[Sales Price]', '[Item No_]=' & [Item No_]));


Если [Item No_] текстовое то условие в функции надо будет подправить.

Если данные нужны для отчета, то задачу можно решить по другому.

  Ответить  
 
 автор: Diamand   (02.03.2012 в 13:29)   личное сообщение
 
 

да [Item No_] текстовое

нет это не для отчета - на основании этого запроса будет еще один запрос но с участием другой таблицы

а каким образом подправить запрос ?

  Ответить  
 
 автор: Анатолий (Киев)   (02.03.2012 в 15:52)   личное сообщение
 
 

DMax("[Starting Date]", "[Sales Price]", "[Item No_]='" & [Item No_] & "'"))

  Ответить  
 
 автор: Diamand   (02.03.2012 в 17:46)   личное сообщение
 
 

OK ,попробую

  Ответить  
 
 автор: Diamand   (06.03.2012 в 16:23)   личное сообщение
 
 

все получилось спасибо Анатолий

  Ответить  
 
 автор: Анатолий (Киев)   (06.03.2012 в 16:40)   личное сообщение
 
 

Так какой запрос быстее?

  Ответить  
 
 автор: Diamand   (06.03.2012 в 17:17)   личное сообщение
 
 

я еще одно условие добавил которое сокращает число записей (ненужных) и 2ой запрос относительно быстро работает , а так на глаз 2 пошустрей

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList