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下一篇: How to determine the work items associated with a source branch in TFS 2010?