2014-11-18 2 views
0

У меня есть таблица tbltransPostgreSQL найти среднее время между 2 или более дня

transno | agent name | date| 

--------+-----------+------- 

1 01 | waw |2014-10-10| 

1 02 | waw |2014-10-15| 

1 03 | waw |2014-10-20| 

1 04 | waw |2014-10-30| 

я хочу запрос для PostgreSQL, что вычислить среднее время AgentName

Результат таков:

agent name | average time| 

--------+------------ 

waw  | 5days  | 

Я надеюсь, что кто-нибудь мне поможет. , спасибо и больше власти :)

ответ

0

Что-то вроде этого:

select agent_name, 
     (max(date) - min(date))/count(*) as average_days 
from tbltrans 
group by agent_name; 
+0

нет, сэр , .Это должно быть. , найдите разницу между этими датами и найдите среднее значение между разницей. , 5 + 5 + 10 = 20, затем 20/3, поэтому среднее время составляет 6,66. , извините за результат в моем посте. – mics

+0

@MichaelDelgadoBeray Хмм, '20' рассчитан таким образом. Не будет ли считать (*) - 1' то это сделать? –

0

Вот решение: B-)

with diff(agent_name, values) as 
(
select agent_name, date - lag(date,1,date) over (partition by agent_name order by date) from agents 
) 
select agent_name, 
     case when count(values) = 1 then '0 days' 
      else to_char(sum(values)::float/(count(values) - 1), '999.99') || ' days' 
     end 
from diff 
group by agent_name; 

Я использовал Windowing functions и Common table expressions в растворе