我有一个看起来像这样的大表(数百万条记录)。我需要每天获得前 30%(或第 70 个百分位)。所以结果应该看起来像节表。该表已经Bread_Date
按升序排序,并且consumption_per_eater
值已经按降序排序。
我知道这类似于 top-N 问题,我可能需要将其写为select
语句的一部分:
if(@preBread_Date 为 null 或 @preBread_Date != Bread_Date, @row:=1, @row:=@row+1) as 'row', @preBread_Date := Bread_Date
但我被困住了。我不知道该写什么,因为每天都有不同数量的记录。所以在下面的例子中,2012-07-10 只有 3 条记录,而 2012-07-11 有 6 条不同的记录,2012-07 有 4 条记录。我想避免的一件事是任何加入。
如果有人能告诉我接下来需要写的查询,我将不胜感激。提前致谢。
面包日期 | Consumption_Per_Eater
.................................................. .....................
2012-07-10 | 300.1
2012-07-10 | 290.9
2012-07-10 | 230.5
2012-07-11 | 230.3
2012-07-11 | 340.1
2012-07-11 | 330.9
2012-07-11 | 230.5
2012-07-11 | 210.3
2012-07-11 | 209.4
2012-07-12 | 400.9
2012-07-12 | 300.5
2012-07-12 | 210.3
2012-07-12 | 200.4
面包日期 | Top_30%_of_that_day
..................................... ...................................
2012-07-10 | XXXXXXX
2012-07-11 | XXXXXXX
2012-07-12 | XXXXXXX