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

Откуда:
Сообщений: 15
Комрады помогите плиз решить задачку

есть таблица

fin |status |data |KC
asd| 5 |2013-10-31 |BAX
asd| 5 |2013-10-31 |tut
asd| 4 |2013-10-31 |tut
asd| 4 |2013-11-28 |BAX

Надо получить статус за максимальную дату где КС=BAX

Я делаю следующим образом
select
fin,KC,
max(status) as status, max(data) as data

from prob where KC='BAX'
group by fin,KC

fin |KC |status| data
asd |BAX |5 | 2013-11-28

но статус не верный за эту дату.

пробывал over подключить

select
fin,KC,
max(status) over(partition by max(data)) as status, max(data) as data

from prob where KC='BAX'
group by fin,KC , status

fin |KC |status| data
asd |BAX |5 |2013-10-31
asd |BAX |4 |2013-11-28

Но результат не радует

Как вывести статус привязанный к максимальное дате?
14 ноя 13, 14:35    [15128585]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
select top 1 *
from prob where KC='BAX'
order by row_number()over(partition by KC order by data desc)
14 ноя 13, 14:42    [15128663]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Airgolem
Member

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

не вариант,а если значений больше будет=)
14 ноя 13, 14:45    [15128701]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
LexusR
select top 1 *
from prob where KC='BAX'
order by row_number()over(partition by KC order by data desc)
Если KC жёстко задан, сортировать достаточно просто по data DESC.
Если для всех KC (без where KC='BAX'), то надо TOP(1) WITH TIES, а не просто ТОP 1
14 ноя 13, 14:50    [15128766]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
TC просил получить статус за максимальную дату где КС=BAX
поэтому и без with ties
14 ноя 13, 14:52    [15128807]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
LexusR
TC просил получить статус за максимальную дату где КС=BAX
поэтому и без with ties
Дык, я и говорю, ROW_NUMBER() тоже не нужен
14 ноя 13, 14:56    [15128857]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Jaffar
Member

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

select top 1 t.status, t.*
from Table_1 t
where
        t.KC = 'BAX'
order by data desc


--ЕСЛИ НУЖНО для каждого найти статус в последюю дату:

select t2.*
from (select distinct KC from Table_1) t1
cross apply(select top 1 t2.*
            from Table_1 t2 
            where
                    t2.KC = t1.KC
            order by t2.Date desc /**/ ) t2
14 ноя 13, 15:05    [15128951]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Airgolem
Member

Откуда:
Сообщений: 15
select
fin, KC, status , data
from
(select MAX(data) abir
from prob

)a
inner join prob on a.abir=prob.data
where KC='BAX'

Вот, мне нравится.
14 ноя 13, 15:05    [15128952]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Airgolem
Member

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

Спасибо большое=)
14 ноя 13, 15:05    [15128956]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Airgolem
Member

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

У тебя точнее, у меня дублей много создастся на большой базе=))
14 ноя 13, 15:07    [15128969]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить