Вы можете использовать row_number()
с partition by date
и сверять с количеством 30% от общего количества за каждый день.
select date,receipt,total
from (select *,
ceiling(tc * 30.00 / 100.00) as under30
from (select date,
receipt,
total,
row_number() over(partition by date order by (select null)) rn,
count(*) over(partition by date order by (select null)) tc
from sales) t
) t1
where rn <= under30
DEMO
Выход:
+------------+---------+-------+
| date | receipt | total |
+------------+---------+-------+
| 2018-04-21 | 325 | 600 |
+------------+---------+-------+
| 2018-04-21 | 326 | 800 |
+------------+---------+-------+
| 2018-04-26 | 330 | 600 |
+------------+---------+-------+
| 2018-04-26 | 331 | 1080 |
+------------+---------+-------+
| 2018-04-29 | 334 | 600 |
+------------+---------+-------+
| 2018-05-01 | 336 | 1500 |
+------------+---------+-------+
Примечание: Если вы хотите, чтобы в этом случае было 30% от общего количества, вам нужно изменить логику вычисления количества, как показано в приведенном выше запросе.
count(*) over(order by (select null)) tc