我试图选择前几年'今年最畅销产品的数据,看看它们是如何随着时间的推移而完成的。
我目前有类似的东西:
u = pd.Series(t[s].values, index=s.index)
它为我提供了本年度的数据,但我不确定如何为前几年同样的前10名提取数据,因为今年的前十名可能与前几年有所不同#&# 39;前10名。
我想知道是否有办法按照以下方式做某事:
SELECT TOP 10 *
WHERE Table.Year = 2016
ORDER BY Table.Transactions DESC
除了显然我不知道该替代括号内的条件。
任何建议都将不胜感激。谢谢!
答案 0 :(得分:1)
SELECT *
From Table
WHERE Table.Year = 2015
AND ID IN (
SELECT TOP 10 ID
FROM Table
WHERE Table.Year = 2016
ORDER BY Table.Transactions DESC
)
ORDER BY Table.Transactions DESC
答案 1 :(得分:1)
使用窗口功能:
select t.*
from (select t.*,
row_number() over (partition by year order by transactions desc) as seqnum
from t
) t
where seqnum <= 10;
另一种有趣的方式是使用cross apply
:
select t.*
from (select 2015 as yyyy union all select 2016) y cross apply
(select top 10 t.*
from t
where t.year = y.yyyy
order by transactions desc
) t;
您可以使用子查询(select distinct year from t) y
。
答案 2 :(得分:0)
注意ID应该是一些像PK
这样的唯一值SELECT *
FROM YourTable
WHERE YourTable.Year = 2015
AND ID IN
(SELECT TOP 10 ID
WHERE Table.Year = 2016
ORDER BY Table.Transactions DESC)
答案 3 :(得分:0)
select *
from (select t.*
,dense_rank () over (partition by t.year order by t.transactions desc) as dr
from t
) t
where t.dr <= 10
order by t.year
,t.dr
;