Re: Оптимизировать запрос
От: AmKad  
Дата: 25.03.11 22:34
Оценка:
Если база MS SQL 2005+, то
-- Эмуляция тестовых данных
with your_table as(
select 1 client_id, cast('2010-01-15 12:17:23' as datetime) dt1, cast('2010-01-19 10:12:23' as datetime) dt2, cast('2010-01-15 12:02:23' as datetime) dt3 union all 
select 1 client_id, cast('2010-01-15 12:12:23' as datetime) dt1, cast('2010-01-15 12:12:23' as datetime) dt2, cast('2010-01-15 12:12:23' as datetime) dt3 union all 
select 1 client_id, cast('2010-01-10 12:12:23' as datetime) dt1, cast('2010-01-20 12:12:23' as datetime) dt2, cast('2010-01-12 12:12:23' as datetime) dt3 union all 
select 2 client_id, cast('2010-01-15 12:12:23' as datetime) dt1, cast('2010-01-15 12:12:23' as datetime) dt2, cast('2010-01-15 12:12:23' as datetime) dt3 union all 
select 2 client_id, cast('2010-01-10 12:12:23' as datetime) dt1, cast('2010-01-15 12:12:23' as datetime) dt2, cast('2010-01-15 12:12:23' as datetime) dt3 union all 
select 3 client_id, cast('2010-01-12 12:12:23' as datetime) dt1, cast('2010-01-15 12:12:23' as datetime) dt2, cast('2010-01-14 12:12:23' as datetime) dt3 union all 
select 3 client_id, cast('2010-01-14 12:12:23' as datetime) dt1, cast('2010-01-15 12:12:23' as datetime) dt2, cast('2010-01-15 12:12:23' as datetime) dt3 union all 
select 4 client_id, cast('2010-01-15 12:12:23' as datetime) dt1, cast('2010-01-10 12:12:23' as datetime) dt2, cast('2010-01-12 12:12:23' as datetime) dt3
)
-- Сам запрос
select convert(varchar(10), dt, 20) dt, count(distinct client_id) cnt_client
from
  (select * from your_table) s
unpivot (dt for t in (dt1, dt2, dt3)) np
group by convert(varchar(10), dt, 20)
order by 1;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.