2013-04-16 2 views
0

Не уверен, если это потому, что я устал, но я не могу понять это ...SQL Select, конкретные строки на основе нескольких условий?

Я ищу для запроса, который будет фильтровать данные, основанные на пару пунктов ...

образец данных:

Business_Month ID Calls Transferred Loaded 
11/1/2012 0:00 119118 226 16 12/19/12 15:56 
12/1/2012 0:00 119118 333 17 1/15/13 23:54 
1/1/2013 0:00 119118 284 6 3/13/13 17:49 
1/1/2013 0:00 119118 284 6 3/20/13 13:03 
1/1/2013 0:00 119118 284 6 3/20/13 13:25 
2/1/2013 0:00 119118 219 8 3/20/13 13:25 
3/1/2013 0:00 119118 17 0 3/20/13 13:03 
3/1/2013 0:00 119118 17 0 3/20/13 13:25 
11/1/2012 0:00 120327 216 13 12/19/12 15:56 
12/1/2012 0:00 120327 211 12 1/15/13 23:54 
1/1/2013 0:00 120327 255 8 3/13/13 17:49 
1/1/2013 0:00 120327 255 8 3/20/13 13:03 
1/1/2013 0:00 120327 255 8 3/20/13 13:25 
2/1/2013 0:00 120327 166 9 3/20/13 13:25 
3/1/2013 0:00 120327 13 2 3/20/13 13:03 
3/1/2013 0:00 120327 13 2 3/20/13 13:25 

что я хотел бы вернулся, это одна линия, Per Бизнес месяц, для каждого уникального идентификатора с самым высоким Loaded Дата ...

Пример вывода:

Business Month ID Calls Transferred Loaded 
11/1/2012 0:00 119118 226 16 12/19/12 15:56 
12/1/2012 0:00 119118 333 17 1/15/13 23:54 
1/1/2013 0:00 119118 284 6 3/20/13 13:25 
2/1/2013 0:00 119118 219 8 3/20/13 13:25 
3/1/2013 0:00 119118 17 0 3/20/13 13:25 
11/1/2012 0:00 120327 216 13 12/19/12 15:56 
12/1/2012 0:00 120327 211 12 1/15/13 23:54 
1/1/2013 0:00 120327 255 8 3/20/13 13:25 
2/1/2013 0:00 120327 166 9 3/20/13 13:25 
3/1/2013 0:00 120327 13 2 3/20/13 13:25 

Я пробовал разные вещи, но не могу понять это ... Я использую MS SQL Server ...

Надеюсь кто-то может помочь.

Спасибо!

+0

Можете ли вы поделиться тем, что вам «Пробовал? – Nunser

ответ

1
;WITH x AS 
(
    SELECT [Business_Month], ID, Calls, Transferred, Loaded, 
    rn = ROW_NUMBER() OVER 
    (PARTITION BY ID, [Business Month] ORDER BY Loaded DESC) 
    FROM dbo.yourtable 
) 
SELECT [Business Month], ID, Calls, Transferred, Loaded 
FROM x 
WHERE rn = 1 
ORDER BY ID, [Business Month]; 
+0

Работал отлично !!! Благодаря! – Nortron

1

Вы можете использовать подзапрос, чтобы получить значение max(loaded) для каждого business_month, а затем присоединиться, что вернуться к yourtable, чтобы получить желаемый результат:

select t1.Business_Month, 
    t1.ID, 
    t1.Calls, 
    t1.Transferred, 
    t1.Loaded 
from yourtable t1 
inner join 
(
    select Business_Month, 
    max(Loaded) MaxLoaded 
    from yourtable 
    group by Business_Month 
) t2 
    on t1.Business_Month = t2.Business_Month 
    and t1.Loaded = t2.MaxLoaded 
order by t1.id, t1.business_month; 

См SQL Fiddle with Demo

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