Процентное соотношение с использованием SQL Common Table Expression или любого другого подхода, пожалуйста? - PullRequest
1 голос
/ 23 февраля 2012

enter image description here

Для получения набора данных2 я использую следующее CTE

;WITH RecordsWithNoDuplicates_CTE (RowNo,[Name]
       ,[DateAdded]
      ,Reason
   ) AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY name Order by DateAdded DESC) AS 'RowNo'
    ,Name,
    DateAdded,
    Reason
 FROM 
    MyTable
)
SELECT * FROM RecordsWithNoDuplicates_CTE where rowno=1

Для получения набора данных3 я делаю следующее

  ;WITH RecordsWithSpecificCase_CTE (RowNo,[Name]
           ,[DateAdded]
          ,Reason
       ) AS
    (
    SELECT ROW_NUMBER() OVER (PARTITION BY name Order by DateAdded DESC) AS 'RowNo'
        ,Name,
        DateAdded,
        Reason
     FROM 
        MyTable
    WHERE REASON='Case1'
    )
    SELECT * FROM RecordsWithSpecificCase_CTE where rowno=1

Мне нужнорассчитать процентное отношение записей, относящихся к причине = случай1, из всех записей в наборе данных2

1 Ответ

0 голосов
/ 13 марта 2012

Просто чтобы немного расширить комментарий выше ...

В вашей ситуации я, вероятно, сначала сделал бы представление или функцию для получения последних записей.Это просто оболочка для вашего CTE, и вам не придется дублировать его.

CREATE VIEW LatestRecords
AS
    WITH RecordsWithNoDuplicates_CTE  AS
    (
    SELECT 
        ROW_NUMBER() OVER (PARTITION BY name Order by DateAdded DESC) AS RowNo,
        Name,
        DateAdded,
        Reason 
    FROM 
        MyTable
    )
    SELECT * FROM RecordsWithNoDuplicates_CTE WHERE RowNo=1

Это представление затем доступно для последующих запросов и функций, таких как этот:

SELECT 
    100*Count(CASE WHEN Reason='Case1' THEN 1 ELSE NULL END)/Count(*) as Percentage
FROM LatestRecords

, который будет подсчитывать количество вхождений последней записи с аргументом reason = "Case1" и делить его на общее количество последних записей (с указанием вашего процента).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...