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

Откуда:
Сообщений: 219
Вот попалась одна интересная задача

Есть таблица t.
ProductName Date Price
TV 01-02-2001 25
TV 01-02-2002 20
TV 01-02-2003 15
TV 01-02-2004 16
Radio 01-02-2001 17
Radio 01-02-2002 16
Radio 01-02-2003 35
Mobile phone 01-02-2005 15
Mobile phone 01-02-2007 16


Задача - получить список товаров где дата максимальная

TV 01-02-2004 16
Radio 01-02-2003 35
Mobile phone 01-02-2007 16


Вложеные запросы использовать нельзя.
Ваши мысли ?
24 окт 13, 12:34    [15025612]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
Добрый Э - Эх
Guest
Мысль как всегда одна - пользовать поиск по форуму. Ибо задача - баян, решений - вагон. В том числе и без вложенных запросов...
24 окт 13, 12:39    [15025662]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
Лудус
Member [заблокирован]

Откуда:
Сообщений: 219
Ну предположим не вагон,
а всего лишь одно решение без вложенных запросов, номер 2 если без привязки к версии сервера.
Но то что баян, вижу.
Жаль, недавно сам додумался к решению, думал чтото новенькое.
24 окт 13, 12:45    [15025708]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
declare @table table (ProductName varchar(100),Date datetime,Price int)
insert into @table values
('TV','01-02-2001',25) 
,('TV','01-02-2002',20) 
,('TV','01-02-2003',15) 
,('TV','01-02-2004',16) 
,('Radio','01-02-2001',17) 
,('Radio','01-02-2002',16) 
,('Radio','01-02-2003',35) 
,('Mobile phone','01-02-2005',15) 
,('Mobile phone','01-02-2007',16) 

select top 1 with ties * from @table 
order by dense_rank()over(order by date)
24 окт 13, 12:45    [15025710]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
Добрый Э - Эх
Guest
Лудус
Жаль, недавно сам додумался к решению, думал чтото новенькое.
Все новое - хорошо забытое старое (с). :) ;)
24 окт 13, 12:46    [15025725]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
Добрый Э - Эх
Guest
LexusR,

и такое решение (№0) есть по ссылке. За той лишь разницей, что вместо dense_rank используется другой ранжировщик - row_number
24 окт 13, 12:48    [15025744]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
я ссылку увидел после того как опубликовал
24 окт 13, 12:49    [15025752]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
Добрый Э - Эх
Guest
Лудус
то что баян, вижу.
кстати, тот пост по ссылке выше - по факту лишь мой же перепост моего же поста в оракловой ветке, переработанного для MS SQL Server-ной ветки. А уж там пост датируется 2008 годом. :)
24 окт 13, 12:52    [15025777]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
Лудус
Member [заблокирован]

Откуда:
Сообщений: 219
Добрый Э - Эх
Лудус
то что баян, вижу.
кстати, тот пост по ссылке выше - по факту лишь мой же перепост моего же поста в оракловой ветке, переработанного для MS SQL Server-ной ветки. А уж там пост датируется 2008 годом. :)


Каждый год ... с лёгким паром ...
24 окт 13, 12:54    [15025795]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
начинающий sql-гуру
Member

Откуда: мяуский кот, родом из мая
Сообщений: 1299
Лудус,

Задача стандартная, без подвоха.
Но она хорошо отсеивает на собеседовании тех, кто не любит свою работу и не интересуется используемыми в ней технологиями.
Нажал на F5 - отработало, результат похож на правду, какой же я умный, не то что вся эта школота с их книжками!
Старперы книжек не читают, они код пишут.
25 окт 13, 11:19    [15030492]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
ievhen.b
Member

Откуда:
Сообщений: 13
Ребята, я не очень опытен и, если не сложно, объясните мне почему нельзя использовать конструкцию:

SELECT top 1 t.* 
FROM t
ORDER BY t.Date DESC
25 окт 13, 18:42    [15033910]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
ievhen.b
Member

Откуда:
Сообщений: 13
Все, народ, простите, вопрос снят)
25 окт 13, 18:45    [15033923]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
pio777
Member

Откуда:
Сообщений: 127
Лудус,

По результату, который вы ожидаете, вам нужно найти последние цены на товары. Если переделать запрос LexusR, то это будет выглядеть так:

declare @table table (ProductName varchar(100),Date datetime,Price int)
insert into @table values
('TV','01-02-2001',25) 
,('TV','01-02-2002',20) 
,('TV','01-02-2003',15) 
,('TV','01-02-2004',16) 
,('Radio','01-02-2001',17) 
,('Radio','01-02-2002',16) 
,('Radio','01-02-2003',35) 
,('Mobile phone','01-02-2005',15) 
,('Mobile phone','01-02-2007',16) 

select top 1 with ties * from @table 
order by dense_rank()over(partition by ProductName order by date desc)
26 окт 13, 11:58    [15035859]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из хистори таблицы  [new]
Добрый Э - Эх
Guest
Лудус
Ну предположим не вагон,
а всего лишь одно решение без вложенных запросов
Как минимум, есть ещё "одно решение", по ссылке неописанное.
Решение трюковое, но честное и имеющее право на жизнь...
31 окт 13, 15:32    [15059234]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить