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

Откуда:
Сообщений: 41
Всем привет!
Как можно выбрать по максимальной дате из второго столбца для каждого элемента из первого?
К примеру:

номер дата
1 2004-07-10
1 2005-07-10
2 2004-07-10
2 2004-08-10
3 2002-07-10

запрос должен вывести:
1 2005-07-10
2 2004-08-10
3 2002-07-10

Заранее благодарю!
29 сен 16, 14:09    [19723709]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Vyacheslav07,

MAX() OVER PARTITION BY ()
29 сен 16, 14:11    [19723722]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
правильный проходящий.
Guest
Vyacheslav07,
курсы валюты на дату документа? Очень редкая задача. :)
29 сен 16, 14:13    [19723730]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Vyacheslav07
Member

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

не понятно =(
29 сен 16, 14:15    [19723745]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Vyacheslav07,

SELECT Id,MAX([Date]) 
FROM [TABLE]
GROUP BY Id
29 сен 16, 14:17    [19723757]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Vyacheslav07
Member

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

я так и написал, только не всегда правильно работает(
29 сен 16, 14:18    [19723765]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Vyacheslav07
TaPaK,

я так и написал, только не всегда правильно работает(

гадалку в студию.
скрип создания таблицы из которой выбираете
29 сен 16, 14:21    [19723785]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Vyacheslav07
Member

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

ну хорошо, вроде работает, может я протупил. А как еще при этом вывести третье поле? Ругается, то что оно ни в агрегатной функции, ни в group by
29 сен 16, 14:22    [19723794]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Vyacheslav07
TaPaK,

ну хорошо, вроде работает, может я протупил. А как еще при этом вывести третье поле? Ругается, то что оно ни в агрегатной функции, ни в group by

удовлетворите просььбу несчасного скл и добавьте либо "агрегатной функции, ни в group by"
29 сен 16, 14:24    [19723806]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Vyacheslav07
Member

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

в group by если добавляю уже выводит с повторениями в первом столбце, а как добавить строковое значение в агрегатную функцию?
29 сен 16, 14:27    [19723836]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Vyacheslav07,

сначала точно поймите, что вы хотите вывести и представьте что же одно должно выбраться из N ваших строковых значений для конкретного ID
29 сен 16, 14:29    [19723842]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Vyacheslav07
Member

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

строковое значение нужно выбрать которое соответствует выбранной максимальной дате для каждого элемента
29 сен 16, 14:31    [19723853]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Vyacheslav07
Member

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

номер дата
1 2004-07-10 'str1'
1 2005-07-10 'str2'
2 2004-07-10 'str2'
2 2004-08-10 'str1'
3 2002-07-10 'str2'

запрос должен вывести:
1 2005-07-10 'str2'
2 2004-08-10 'str1'
3 2002-07-10 'str2'
29 сен 16, 14:34    [19723879]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Vyacheslav07,
более извращённо не могу придумать :)

DECLARE @Table TABLE
(
	ID	INT,
	Dt	Date,
	Info	VARCHAR(255)
)

INSERT INTO @Table
SELECT 1, '2004-07-10', 'str1' UNION ALL
SELECT 1, '2005-07-10', 'str2' UNION ALL
SELECT 2, '2004-07-10', 'str2' UNION ALL
SELECT 2, '2004-08-10', 'str1' UNION ALL
SELECT 3, '2002-07-10', 'str2'

SELECT DISTINCT
	Id,	
	MAX(Dt) OVER (PARTITION BY ID ),
	LAST_VALUE(INFO)	OVER (PARTITION BY ID ORDER BY Dt  RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING )
FROM @Table
29 сен 16, 14:49    [19723966]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Vyacheslav07
Member

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

пишет неверный синтаксис около конструкции range,
также система не распознает UNBOUNDED PRECEDING и UNBOUNDED FOLLOWING
29 сен 16, 14:57    [19724009]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Vyacheslav07
TaPaK,

пишет неверный синтаксис около конструкции range,
также система не распознает UNBOUNDED PRECEDING и UNBOUNDED FOLLOWING

версию сервера угадывать лень :) 3 желания исполнено
29 сен 16, 14:59    [19724020]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Vyacheslav07
Member

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

поправил, сейчас пишет неверный синтаксис около конструкции INFO
29 сен 16, 14:59    [19724021]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Vyacheslav07
Member

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

2008 версия
29 сен 16, 15:00    [19724025]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Vyacheslav07
Member

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

около range неверный синтаксис пишет короче(
29 сен 16, 15:01    [19724034]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
DECLARE @Table TABLE
(
	ID	INT,
	Dt	Date,
	Info	VARCHAR(255)
)

INSERT INTO @Table
SELECT 1, '2004-07-10', 'str1' UNION ALL
SELECT 1, '2005-07-10', 'str2' UNION ALL
SELECT 2, '2004-07-10', 'str2' UNION ALL
SELECT 2, '2004-08-10', 'str1' UNION ALL
SELECT 3, '2002-07-10', 'str2'


select top 1 with ties *
from @Table
order by ROW_NUMBER() over(partition by id order by dt desc)
29 сен 16, 15:04    [19724066]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Vyacheslav07
Member

Откуда:
Сообщений: 41
3unknown,

спасибо! работает!
29 сен 16, 15:10    [19724094]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимального значения для каждого элемента  [new]
Добрый Э - Эх
Guest
Vyacheslav07,

RTFF

Может уже кто Ф.А.К. по данному вопросу оформит? Он же возникает "по семь раз на дню"
30 сен 16, 04:26    [19726205]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить