我有一张这样的桌子
item_id date number
1 2000-01-01 100
1 2003-03-08 50
1 2004-04-21 10
1 2004-12-11 10
1 2010-03-03 10
2 2000-06-29 1
2 2002-05-22 2
2 2002-07-06 3
2 2008-10-20 4
我正在尝试获取最近3个日期中每个uniq Item_id的平均值。 这很困难,因为之间缺少日期,因此一定范围的硬编码日期并不总是有效。
我希望得到这样的结果:
item_id MyAverage
1 10
2 3
我真的不知道该怎么做。目前,我设法完成一项任务,但是我很难将其扩展到多项任务:
SELECT AVG(MyAverage.number) FROM (
SELECT date,number
FROM item_list
where item_id = 1
ORDER BY date DESC limit 3
) as MyAverage;
我的主要问题是将"DESC limit 3"
推广到group by id
。
尝试:
SELECT item_id,AVG(MyAverage.number)
FROM (
SELECT item_id,date,number
FROM item_list
ORDER BY date DESC limit 3) as MyAverage
GROUP BY item_id;
极限把事情搞砸了。
我已经在日期和日期之间使用它来“工作”,但是它不能按我的意愿工作,因为我需要一个限制而不是一个硬编码的日期。
任何人都可以帮忙
答案 0 :(得分:0)
您可以使用row_number()
将1
分配给3
的记录,记录的最后日期为ID,然后对其进行过滤。
SELECT x.item_id,
avg(x.number)
FROM (SELECT il.item_id,
il.number,
row_number() OVER (PARTITION BY il.item_id
ORDER BY il.date DESC) rn
FROM item_list il) x
WHERE x.rn BETWEEN 1 AND 3
GROUP BY x.item_id;