| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Выборка значения с максимальной датой |
| Автор: Cashey 18.8.2015, 20:11 | ||
| Условие: Есть таблица, имеет, допустим, три поля: 1. kod - неуникальный идентификатор 2. reason - некое значение 3. dstop - дата, связанная с основным значением пример: kod reason dstop 5068070838000124 1 2013-01-01 5068070838000124 5 2014-02-02 5068070838000124 3 2015-03-03 требуется вытащить только значение поля reason из строки с максимальным значением поля dstop Я родил такую конструкцию:
Функционально работает, но выглядет как извращение. Задача тривиальная, думаю кому-то уже хватило мозгов создать что-то более рациональное. Спасибо за подсказку. |
| Автор: Cashey 19.8.2015, 19:55 | ||||
Элегантно, но не применимо. Приведенный в примере where S_file.kod ='5068070838000124' лишь частный случай. В общем случае в этом месте предполагается множество. И конструкция может быть where S_file.kod in (...). В этом случае SELECT TOP 1 не работоспособно. |
| Автор: Akina 19.8.2015, 20:58 |
| Cashey, значит, сперва обдумайте свой вопрос полностью, а потом спрашивайте. |
| Автор: ТоляМБА 19.8.2015, 21:02 | ||
|
| Автор: Akina 20.8.2015, 09:22 |
| ТоляМБА, я бы рекомендовал фильтр по коду убрать в подзапрос. Cashey, если версия сервера знает про оконные функции - лучше используй DENSE_RANK() OVER (PARTITION BY kod ORDER BY dstop DESC) |
| Автор: ТоляМБА 20.8.2015, 10:16 | ||
Akina, согласен.
|
| Автор: Cashey 20.8.2015, 19:12 | ||||
Глупо как, я не догодался в выражение ON первого JOIN вставить второе условие, тянув для этого второй JOIN. Но в целом идея та же. |