Hik*_*ari 2 sql-server t-sql sql-server-2012
我有一个表作为这个例子:
CREATE TABLE customerEvent(
customerID int NOT NULL,
eventID int NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
customerID 可能出现在许多记录中。我使用以下查询来识别最常用的 customerID:
SELECT
customerID,eventID
,row_number() OVER(PARTITION BY customerID ORDER BY eventID) as frequency
FROM customerEvent
ORDER BY frequency DESC
Run Code Online (Sandbox Code Playgroud)
有了这个我看到了那些最频繁的customerID。但它们仅在列表顶部出现一次。例子:
customerID eventID frequency
7 3 5
15 9 4
7 1 4
9 4 3
7 10 3
15 2 3
Run Code Online (Sandbox Code Playgroud)
我需要最频繁的 customerID 的所有记录出现在顶部,例如:
customerID eventID frequency
7 3 5
7 1 4
7 10 3
15 9 4
15 2 3
9 4 3
Run Code Online (Sandbox Code Playgroud)
知道如何构建一个查询吗?
看来你真的不需要排序的“频率”,只需要每个客户的“最大频率”。您可以使用COUNT(*) OVER (PARTITION BY customerID):
SELECT
customerID,
eventID,
ROW_NUMBER() OVER (PARTITION BY customerID ORDER BY eventID) AS frequency
FROM
customerEvent
ORDER BY
COUNT(*) OVER (PARTITION BY customerID) DESC,
customerID,
frequency DESC ;
Run Code Online (Sandbox Code Playgroud)
第二部分order by需要是customerID为了以防万一。我假设如果您有两个或更多客户的事件数量相同,您不希望他们的事件混淆。
| 归档时间: |
|
| 查看次数: |
3039 次 |
| 最近记录: |