Sql:一个日期的平均值

我必须编写一个查询来计算每个客户购物之间的平均天数(不使用子查询)。

    create table data {
customer varchar(20) not null,
bought date not null,
primary key (customer,bought)
}

例如,

insert into data (customer,bought)
values (‘John Smith’, date ‘2011-02-01’),
(‘Alice Cooper’, date ‘2011-02-01’),
(‘Bob Baker’, date ‘2011-02-01’),
(‘John Smith’, date ‘2011-02-02’),
(‘Bob Baker’, date ‘2011-02-02’),
(‘Bob Baker’, date ‘2011-02-03’),
(‘Bob Baker’, date ‘2011-02-04’),
(‘Bob Baker’, date ‘2011-02-05’),
(‘Bob Baker’, date ‘2011-02-06’),
(‘Bob Baker’, date ‘2011-02-07’),
(‘John Smith’, date ‘2011-02-07’),
(‘Alice Cooper’, date ‘2011-02-08’);

应该返回约翰史密斯等待1天然后5天,所以他的平均时间是3天。 艾丽斯库珀(!)等了7天,所以她的平均水平是7.鲍勃贝克是一个每日参赛者,所以他的平均数是1。

我做了这样的事情

select distinct customer, avg (bought) as average from data;

但它不起作用。

任何帮助将不胜感激。


PostgreSQL版本的链接答案

select customer, (max(bought) - min(bought)) / (count(bought)-1)
from data
group by customer;

您必须在时代秒内转换您的时间戳以使用avg聚合函数:

SELECT
    customer,
    timestamp without time zone '1970-01-01' + cast(
       avg(EXTRACT(EPOCH FROM bought::timestamp)
    )::text as interval) 
FROM data
GROUP BY customer;

您可能需要使用group by语句

select 
   customer, 
   datediff(D, min(bought), max(bought)) / count(bought) as average
from data
group by customer

只要您在选择列表中具有聚合函数,就必须在非聚合成员的其他字段上使用分组。

这在SQL Server上进行了测试,语法可能与Postgresql不同,我不使用它。

链接地址: http://www.djcxy.com/p/5459.html

上一篇: Sql: average of a dates

下一篇: How to determine the work items associated with a source branch in TFS 2010?