Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Помогите составить запрос  [new]
glyzin
Member

Откуда:
Сообщений: 258
MS SQL2005
Есть некаая табличка Прихода

Дата Товар Цена

Дата - это дата поступление товара
Товар - товар который поступил
Цена - цена по которой поступил

необходимо вернуть запросом товар и цену "последнего прихода"

возможно ли это сделать без курсоров?
21 июл 09, 17:04    [7441556]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Konst_One
Member

Откуда:
Сообщений: 11514
select TOP 1 * from [Приход]
ORDER BY [Дата] DESC
21 июл 09, 17:06    [7441563]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
glyzin
Member

Откуда:
Сообщений: 258
спасибо просто так .
21 июл 09, 17:12    [7441587]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
_djХомяГ
Guest
если нужен "список" - то возможно так
select top 1 with ties * from таблица
order by row_number() over (partition by товар order by дата desc)

Хотя- если в один день приходовался один товар, но по разным ценам - что должно получаться в результате выборки ?
21 июл 09, 17:24    [7441652]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
glyzin
Member

Откуда:
Сообщений: 258
что значит список , нужно чтоб вернул все товары котороые в этой таблице были с последней ценой приходной
21 июл 09, 18:06    [7441921]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
glyzin
Member

Откуда:
Сообщений: 258
что то мне кажется меня не поняли


нужен ни один товар это раз, а весь асортисмент товара который учавстовал в приходе
21 июл 09, 18:10    [7441935]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
_djХомяГ
Guest
glyzin
что значит список , нужно чтоб вернул все товары котороые в этой таблице были с последней ценой приходной


а Вы выполняли запрос Konst_One и тот, что я прислал - разница есть какая нибудь?
21 июл 09, 18:11    [7441951]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
glyzin
что то мне кажется меня не поняли
Наверное, потому, что Вы не привели пример тестовых данных и желаемого результата
21 июл 09, 18:13    [7441958]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
glyzin
Member

Откуда:
Сообщений: 258
что то мне подсказывает что он отсортирует по дате по убыванию и возьмет первую строчку, а ваш я еще не пробовал
21 июл 09, 18:13    [7441959]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
glyzin
Member

Откуда:
Сообщений: 258
ок щас приведу
21 июл 09, 18:13    [7441960]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
_djХомяГ
Guest
glyzin
что то мне подсказывает что он отсортирует по дате по убыванию и возьмет первую строчку, а ваш я еще не пробовал

попробуйте :-)
21 июл 09, 18:17    [7441985]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
glyzin
Member

Откуда:
Сообщений: 258
CREATE TABLE [dbo].[test](
[date] [smalldatetime] NULL,
[tovar] [nchar](10) NULL,
[cena] [int] NULL
)

insert into test values(getdate(),'товар1',5)
insert into test values(getdate(),'товар2',50)
insert into test values(getdate(),'товар3',3)
insert into test values(getdate(),'товар1',50)
insert into test values(getdate(),'товар2',10)
insert into test values(getdate(),'товар3',5)

Пусть будет и дата и время.
21 июл 09, 18:20    [7442001]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
GuestGuestSQL
Member

Откуда:
Сообщений: 111
Если товар не меняется например.
SELECT * FROM [ПРИХОД] WHERE [ДАТА] IN
(SELECT MAX([ДАТА]) FROM [ПРИХОД]
GROUP BY [ТОВАР])
21 июл 09, 18:22    [7442007]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
iljy
Member

Откуда:
Сообщений: 8711
glyzin,

последний приход - это последняя по дате запись для каждого товара? тогда вариант _djХомяГ ваш.
21 июл 09, 18:23    [7442013]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
автор, и какой результат необходимо получить на приведенных Вами тестовых данных?
21 июл 09, 18:24    [7442017]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
_djХомяГ
Guest
сорри за оффтоп
наверное ник у меня не вызывает доверия )))))))
21 июл 09, 18:25    [7442025]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
glyzin
Member

Откуда:
Сообщений: 258
все разобрался спасибо всем
select top 1 with ties * from таблица
order by row_number() over (partition by товар order by дата desc)
то что нужно
21 июл 09, 18:26    [7442030]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
glyzin
Member

Откуда:
Сообщений: 258
row_number можно заменить чемнибудь?
21 июл 09, 18:27    [7442036]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
glyzin
row_number можно заменить чемнибудь?
зачем? не по фен-шую?
21 июл 09, 18:29    [7442043]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
vino
Member

Откуда:
Сообщений: 1191
glyzin
row_number можно заменить чемнибудь?
за таким вопросом настала потребность показать результат
select @@version
21 июл 09, 18:30    [7442049]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
glyzin
Member

Откуда:
Сообщений: 258
угу потомучто на самом деле я исполнять буду не на 2005MSSQL а на другом
21 июл 09, 18:33    [7442060]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
vino
настала потребность показать результат
select @@version
Да нет,
glyzin
MS SQL2005
так что наверное
exec sp_dbcmptlevel '<Имя базы>'
21 июл 09, 18:33    [7442061]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
iljy
Member

Откуда:
Сообщений: 8711
glyzin
row_number можно заменить чемнибудь?


? а зачем собственно? у вас же 2005! можно конечно, например так:

select * from
test t1 join (select tovar, max(date) date from test group by tovar) t2
on t1.tovar = t2.tovar and t1.date = t2.date

но зачем? заведомо сложнее,и почти наверняка медленнее.
21 июл 09, 18:33    [7442065]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
glyzin
угу потомучто на самом деле я исполнять буду не на 2005MSSQL а на другом
На 2008 тоже будет работать
21 июл 09, 18:34    [7442066]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
glyzin
Member

Откуда:
Сообщений: 258
может быть вот так?
Provider=VFPOLEDB
21 июл 09, 18:34    [7442068]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить