一道比较难的查询问题
有table结构如下,日期datetim型,姓名VARCHAR型,数量int型.
日期 姓名 数量
2007-05-12 张三 3
2007-05-16 张三 3
2007-05-18 张三 5
2007-05-20 张三 10
2007-05-13 李四 11
2007-05-17 李四 12
2007-05-18 李四 13
2007-05-19 李四 15
2007-05-12 小王 12
2007-05-11 小王 13
2007-05-17 小王 14
2007-05-19 小王 15
要求显示所有人的:
离当前时间最近3次记录的平均间隔时间 姓名 平均数量
DATEDIFF(day,2007-05-16,max(日期))/3 张三 6
DATEDIFF(day,2007-05-17,max(日期))/3 李四 13.3
DATEDIFF(day,2007-05-11,max(日期))/3 小王 14
我只写出了所有记录的平均时间:
select DATEDIFF(day,min(日期),max(日期))/count(姓名),姓名,avg(数量) from table group by 姓名
如何获取离现在最近的第3次记录不知道怎么求,请教各位大侠了.
------解决方案--------------------SELECT uName,AVG(uNum)
FROM tb a
WHERE 3>
(
SELECT COUNT(*) FROM tb WHERE uName=a.uName
AND ABS(DATEDIFF(dd,fDate,GETDATE()))
<ABS(DATEDIFF(dd,a.fDate,GETDATE()))
)
GRUOP BY uName
随手敲的,可能有手误
------解决方案--------------------select [离当前时间最近3次记录的平均间隔时间]=DATEDIFF(day,min(日期),max(日期))/3,姓名,平均数量=ltrim(str(avg(cast(数量 as decimal)),10,1)) from
(
select 日期, 姓名,数量 from test a where 日期 in
(
select top 3 日期 from test where 姓名=a.姓名 order by 日期 desc
)
)b
group by 姓名
------解决方案--------------------多写了一层嵌套,改下
select DATEDIFF(day,min(日期),max(日期))/3, 姓名,平均数量=ltrim(str(avg(cast(数量 as decimal)),10,1)) from test a where 日期 in
(
select top 3 日期 from test where 姓名=a.姓名 order by 日期 desc
)
group by 姓名
------解决方案--------------------select tname,sum(num) from tb a where tdate in ( select top 3 tdate from tb where tname=a.tname order by tdate desc)
group by tname