2010-05-17 2 views
0

У меня есть таблица, которая выглядит следующим образом:Max (SQL-сервер)

BARCODE  | PRICE | STARTDATE 
007023819815 | 159000 | 2008-11-17 00:00:00.000 
007023819815 | 319000 | 2009-02-01 00:00:00.000 

Как я могу выбрать, так что я могу получить результат, как этот:

BARCODE  | PRICE | STARTDATE 
007023819815 | 319000 | 2009-02-01 00:00:00.000 

выберите с помощью макс дата.

Заранее спасибо.

+1

Отметьте этот ответ на аналогичный вопрос, изменив его версию на стартовую: http://stackoverflow.com/questions/95866/select-max-in-group – DavGarcia

+0

@ rah.deex: Я переформатировал ваш вопрос, пожалуйста, посмотрите в новой версии, чтобы узнать о форматировании (http://stackoverflow.com/editing-help) –

+0

@Peter Lang: Спасибо, мистер Питер. Я знаю об этом .. – RahdixC9

ответ

1

Элегантный способ сделать это с помощью аналитической функции row_number:

SELECT barcode, price, startdate 
FROM (
     SELECT * 
     , ROW_NUMBER() OVER (PARTITION BY barcode ORDER BY startdate DESC) as rn 
     FROM YourTable 
     ) subquery 
WHERE rn = 1 

Если производительность является проблемой, проверить некоторые более сложные варианты в this blog post.

+1

Я думаю, вам не хватает 'DESC' рядом с' ORDER BY startdate' – shahkalpesh

+0

@shahkalpesh: Спасибо, отредактировано – Andomar

2
SELECT TOP 1 barcode, price, startdate 
FROM TableName 
ORDER BY startdate DESC 

Или если их может быть более одного ряда.

SELECT barcode, price, startdate 
FROM TableName A 
WHERE startdate = (SELECT max(startdate) FROM TableName B WHERE B.barcode = A.barcode) 

ОБНОВЛЕНИЕ изменил второй запрос, чтобы просмотреть максимальные значения за штрих-кода.

+1

Это будет только выбор строк с максимальной датой начала, а не максимальной начальной датой на штрих-код – Andomar

+0

Изменено, спасибо :) – hgulyan

Смежные вопросы