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

Откуда: Ярославль
Сообщений: 244
Друзья, помогите с селектом.

Есть две таблицы : ид объекта, родитель [ id, id_parent ] и ид объекта, порядковый номер [ id, order ]. Нужно вернуть
[ ид родителя, максимальный порядковый номер у родителя ].
10 апр 13, 11:51    [14160813]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании селекта  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а какой ваш вариант решения ?
max() +group by
10 апр 13, 11:57    [14160852]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании селекта  [new]
Добрый Э - Эх
Guest
gepard1980,

трижды порванный баян
10 апр 13, 11:58    [14160868]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании селекта  [new]
Добрый Э - Эх
Guest
З.Ы.

по указанной ссылки - далеко не все способы решения поставленной задачи.
10 апр 13, 11:59    [14160876]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании селекта  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Добрый Э - Эх,

вот боюсь я ,что ТС как бы все равно.. если стоит такая задача
10 апр 13, 12:01    [14160894]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании селекта  [new]
gepard1980
Member

Откуда: Ярославль
Сообщений: 244
Благодарю за ссылку!
10 апр 13, 12:31    [14161151]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании селекта  [new]
kalimba
Member

Откуда:
Сообщений: 297
Добрый Э - Эх,
А какие есть еще например? Правда очень интересно : )
10 апр 13, 12:57    [14161366]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании селекта  [new]
Добрый Э - Эх
Guest
kalimba,

"вариации на тему" указанных по ссылке,
варианты на оконно-аналитических функциях (min/max over()) + distinct

Но это уже из разряда "плохой практики"

Ну и как вполне себе законный вариант - трюкаческий способ на конкатенации + классическая группировка
10 апр 13, 13:07    [14161446]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании селекта  [new]
gepard1980
Member

Откуда: Ярославль
Сообщений: 244
Благодарю! Воспользовался CROSS APPLY - отличная вещь!
10 апр 13, 15:21    [14162413]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании селекта  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34687
gepard1980,

Дай полюбоваться !
10 апр 13, 15:38    [14162575]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании селекта  [new]
gepard1980
Member

Откуда: Ярославль
Сообщений: 244
Использую MS SQL SERVER 2008 R2.

1. Создал табличную функцию:

CREATE FUNCTION dbo.func_GetTaskLastOrder ( @ParentUID uniqueidentifier )
RETURNS TABLE
AS
RETURN

SELECT MAX(_order_cp) AS max_order
FROM lion_Tasks as t
WHERE @ParentUID = t.uid_parent

GO

2. Создал хранимую процедуру. Ее вызываю из кода ASP.NET, передавая вторым параметром список родителей - пользовательский табличный тип : CREATE TYPE dbo.TasksUidTableType AS TABLE (UUID UNIQUEIDENTIFIER NULL).

CREATE PROCEDURE dbo.GetTasksMaxOrders(@ParentsUids TasksUidTableType READONLY)
AS
BEGIN

SELECT pus.UUID, at.max_order FROM @ParentsUids pus CROSS APPLY dbo.func_GetTaskLastOrder (pus.UUID ) at

END
GO
11 апр 13, 11:35    [14166069]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить