2017-12-21 1 views
0

저는 한 달 같은 특정 시간 간격 동안 각 카테고리에 대해 가장 높은 숫자를 가진 상위 5 개의 행을 얻으려고합니다. 내가 현재 가지고있는 것은 카테고리에 대해 정확히 같은 설명 5 개를 반환합니다. 나는 톱 5를 얻으려고 노력하고있다. 이것은 기간을 기준으로 정렬하려고 할 때만 발생합니다.SQL 사용 월별 범주 별 상위 5 개를 찾으려면 어떻게해야합니까?

WITH CustomerRank 
AS 
(SELECT 
    Count(*) AS "Count", 
    d.Item, 
    d.Description, 
    Name, 
    i.Type, 
    d.CreatedOn  
FROM [dbo].i, 
    d, 
    dbo.b, 
    as, 
    a, 
    c 
WHERE d.Inspection_Id = i.Id AND d.Inspection_Id = i.Id AND 
    b.Id = i.BuildingPart_Id AND b.as= Assessments.Id 
    AND as.Application_Id = a.Id AND a.Customer_Id = Customers.Id         
group by d.Item, d.Description, Name, i.Type, d.CreatedOn 

) 

select * from (
    SELECT "Count",Item,Description,Type,ROW_NUMBER() Over (PARTITION BY Name order by "Count" desc) AS RowNum, Name, CreatedOn 
    FROM CustomerRank 
where CreatedOn > '2017-1-1 00:00:00' 

) s where RowNum <6 

건배

답변

0

는 다음과 같이하십시오 :

WITH CustomerRank 
AS 
(SELECT 
    Count(*) AS "Count", 
    d.Item, d.Description, Name, i.Type 
FROM dbo.Inspection i 
INNER JOIN dbo.Details d ON d.Inspection_Id = i.Id 
INNER JOIN dbo.BuildingParts b ON b.Id = i.BuildingPart_Id 
INNER JOIN dbo.Assessments a ON a.Id = b.AssessmentId 
INNER JOIN dbo.Applications ap ON ap.Id = a.Application_Id 
INNER JOIN dbo.Customers c ON c.Id = a.Customer_Id 
where CreatedOn > '2017-1-1 00:00:00' 
group by d.Item, d.Description, Name, i.Type 
) 
select * from (
    SELECT "Count",Item,Description,Type,ROW_NUMBER() Over (PARTITION BY Name order by "Count" desc) AS RowNum, Name 
    FROM CustomerRank 
) s where RowNum <6 

아이디어는 당신이 그것을 유지하는 경우, 우리가 얻을 것이기 때문에 CreatedOn 열합니다 (GROUP BY 절에서 제거해야한다는 것입니다 CreatedOn 열의 각 값에 대해 다른 행).

또한 각 테이블에 대해 JOIN-s 및 별칭을 사용하는 것이 좋습니다.

+0

감사합니다. 내일 다시 너에게 갈거야. – stacka

+0

나는 그것을 작동시킬 수 있었다. CreatedOn Thingy에 대해 설명해 주셔서 감사합니다. – stacka

관련 문제