Один из способов сделать это - использовать ntile с набором результатов, а затем перенести его в производный запрос и использовать значение ntile в предложении where.
В приведенном ниже примере я разделил ваш набор результатов на 10% фрагментов, упорядоченных по убыванию tradecountpercent, а затем запросил верхний из них.
Я также удалил ";" перед предложением with, поскольку в этом нет необходимости, если оператор, предшествующий предложению with, заканчивается точкой с запятой.
declare @tradetable table (
custid int,
tradedate date,
tradecount int
);
insert @tradetable (custid, tradedate, tradecount)
values
(1, '2018-06-17', 3),
(1, '2018-06-24', 1),
(1, '2018-07-02', 12),
(1, '2018-07-15', 4),
(1, '2018-07-21', 8),
(1, '2018-07-30', 56),
(1, '2018-08-29', 7),
(1, '2018-09-12', 2),
(1, '2018-10-17', 8),
(2, '2018-06-17', 3),
(2, '2018-06-24', 1),
(2, '2018-07-02', 12),
(2, '2018-07-15', 4),
(3, '2018-07-21', 8),
(3, '2018-07-30', 56),
(3, '2018-08-29', 7),
(3, '2018-09-12', 2),
(4, '2018-10-17', 8);
with cte as
(
select
custID,
day(tradedate) as TradeDate,
sum(tradecount) as TradeCountSum
from
@tradetable
where
tradedate >= '2018-6-17'
and
tradedate <= '2019-6-17'
group by
custID,
day(tradedate)
)
select * from (
select ntile(10)over(order by tradecountpercent desc) percents, * from
(
select
custID,
tradedate,
TradeCountSum * 100 / sum(TradeCountSum) over (partition by custID) as TradeCountPercent
from cte )x ) y where percents = 1
order by custID asc, TradeCountPercent desc