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

Откуда:
Сообщений: 63
Добрый день.

Задача с первого взгляда казалось простой :)
среда ms sql 2005
делаю Veiw

таблица штрих кодов содержит: id, код товара (может повторятся), сам штрих код, дата его добавления.

так вот если на один товар 2 и более штрих кода, то надо вывести тот который был введен последним.

SELECT eanGoods, MAX(eanDate) AS Expr1, eanEAN
FROM dbo.dbEAN
GROUP BY eanGoods, eanEAN
HAVING (eanGoods = 178900001)

получаю
178900001 01.11.2011 0:00:00 4010864001071
178900001 05.11.2011 0:00:00 4010864001072


а хотелось бы получить
178900001 05.11.2011 0:00:00 4010864001072
9 ноя 11, 17:58    [11571557]     Ответить | Цитировать Сообщить модератору
 Re: показать тока "позднюю" строку  [new]
smatch
Member

Откуда:
Сообщений: 63
понятно что загвоздка в

GROUP BY eanGoods, eanEAN
как обойти
9 ноя 11, 17:59    [11571569]     Ответить | Цитировать Сообщить модератору
 Re: показать тока "позднюю" строку  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
smatch,

select top 1 with ties eanGoods, eanDate, eanEAN
from dbo.dbEAN
order by ROW_NUMBER() over (partition by eanGoods order by eanDate desc)
9 ноя 11, 18:06    [11571615]     Ответить | Цитировать Сообщить модератору
 Re: показать тока "позднюю" строку  [new]
step_ks
Member

Откуда:
Сообщений: 936
Введён последним по дате? Т.е. одинаковых дат для одного товара быть не может?
SELECT e1.*
FROM dbo.dbEAN e1
WHERE not exists (select * from dbo.dbEAN e2 where e2.eanGoods=e1.eanGoods and e2.eanDate>e1.eanDate)
9 ноя 11, 18:06    [11571618]     Ответить | Цитировать Сообщить модератору
 Re: показать тока "позднюю" строку  [new]
smatch
Member

Откуда:
Сообщений: 63
Baddy, step_ks.
Спасибо ребят.
тока вариант Baddy выдал ошибку.
А вариант step_ks дал результаты как и хотелось.
Спасибо :)
10 ноя 11, 11:23    [11573233]     Ответить | Цитировать Сообщить модератору
 Re: показать тока "позднюю" строку  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
smatch
тока вариант Baddy выдал ошибку.
И какую же, интересно?
10 ноя 11, 11:33    [11573321]     Ответить | Цитировать Сообщить модератору
 Re: показать тока "позднюю" строку  [new]
mccc
Member [заблокирован]

Откуда: Казань
Сообщений: 7650
решил проверить эквивалентное преобразование 11571618
в более мне понятное...
declare @T table (id int identity(1,1), A int, B int)
	insert @T (A,B) values(1,2)
	insert @T (A,B) values(1,2)
	insert @T (A,B) values(1,3)
/*
	insert @T (A,B) values(2,2)
	insert @T (A,B) values(2,2)
	insert @T (A,B) values(2,3)
*/
-- select * from @T

-- Решение [msg=11571618] ---------------------------
SELECT e1.*
FROM @T e1 WHERE not exists (
	select * from @T e2
		where e2.A = e1.A and e2.B > e1.B )
-----------------------------------------------------

-- Оценка -------------------------------------------
SELECT e1.*, '-' x, e2.*
FROM @T e1
left join @T e2 on e1.A = e2.A and e1.B < e2.B
-- эквивалентное Решение ----------------------------
SELECT e1.*, '-' x, e2.*
FROM @T e1
left join @T e2 on e1.A = e2.A and e1.B < e2.B
		WHERE e2.B is null
-----------------------------------------------------
10 ноя 11, 12:10    [11573672]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить