我有这个由客户订购的交易清单#然后是交易日期。我想要的是有一个这样的列表,除了只选择每个客户#的前5个事务#。如果有人能告诉我该怎么做,我真的很感激!
我正在使用sql server 2012
答案 0 :(得分:1)
您可以使用Window Function
Dense_RANK()
SELECT
dt.client_no, dt.Last_Mdt, dt.price, dt.Tax_1, dt.Cashier
FROM(
SELECT client_no, Last_Mdt, price, Tax_1, Cashier,
DENSE_RANK () OVER (PARTITION BY client_no ORDER BY Last_Mdt ASC) AS Rank
FROM Table
)dt
WHERE dt.Rank <=5
答案 1 :(得分:0)
我们也可以使用cross / outer apply运算符来处理这类东西。您可以选择交叉/外部申请,并可以根据您的要求进行订购。
SELECT k.*
FROM Table a
OUTER APPLY
(
SELECT TOP 5 *
FROM Table b
WHERE a.client_no = b.client_no
ORDER BY b.Last_Mdt ASC
)k
答案 2 :(得分:0)
使用CROSS APPLY
的替代选项。
SELECT DISTINCT yt.client_no, ca.Last_Mdt, ca.price, ca.Tax_1, ca.Cashier
FROM YourTable yt
CROSS APPLY (SELECT TOP 5 *
FROM YourTable
WHERE client_no = yt.client_no
ORDER BY Last_Mdt ASC) ca
或者,如果您也有客户表。大概client_no
已经是唯一的。
SELECT yct.client_no, ca.Last_Mdt, ca.price, ca.Tax_1, ca.Cashier
FROM YourClientTable yct
CROSS APPLY (SELECT TOP 5 *
FROM YourTable
WHERE client_no = yt.client_no
ORDER BY Last_Mdt ASC) ca