2017-09-06 1 views
1

나는 열을 반환하는 쿼리를 25 ~ 30,계산 선형 회귀에서의 SQL 서버

판매량은 샐 그 주에 대한 ES 분산 나는 나에게로 출력 줄 것이다 서브 쿼리 내에서이 문제를 포함시킬

:

StoreNo

([Y의 알려진]를 6 주 판매 기록을 바탕으로)

선형 회귀를

나는 일반적으로 그냥이 보일 것 같은데요

LINEST 사용하여 Excel에서이 작업을 수행 할 것 같은 :

Select 
A.StoreNo 
A.LinearRegressionCalculation 

From (SubQuery) A 

쿼리는 내가 판매 역사의 6 주 들어갈 때 사용하는 것입니다 :

SELECT 
    EU.[Store No]                   As 'StoreNo' 
    ,SA.FISCALWEEK                   As 'FiscalWeek' 
    ,CONVERT(DECIMAL(5,4), 
    ( SUM(CASE WHEN SA.FISCALYEAR = 2017 THEN SA.SALESEXVAT/SA.EXCHANGERATEEURO END)/
     SUM(CASE WHEN SA.FISCALYEAR = 2016 THEN SA.SALESEXVAT/SA.EXCHANGERATEEURO END) ) -1) AS 'SalesVar' 
FROM 
    [BHXSQL2014-DEV].BMANALYTICS.DBO.EUACTIVESTORES AS EU 
INNER JOIN 
    [EUUKSQL01].[DASHBOARD].[DBO].[SALESAGGREGATEWEEK] AS SA 
ON 
    EU.[Store No] = SA.BRANCHNO 
    And EU.[Store No] In (
    8702,8711,8701,4167,4164,4160,4169,4155,4794,4746,1701,4619,4617,8867,8878,8891,8743,8876,4806,4710,4100,4826,4148,8757,8866,8787,8821,8756 
    ) 
    And SA.Fiscalweek between 25 and 30 
--COMP FLAG (Y=COMP WEEK, N=NONCOMP WEEK, 'WHERE' STATEMENT EXCLUDES NON COMP WEEKS) 
    AND CASE WHEN LEFT(EU.[COMP WEEK],4) < 2017 THEN 'Y' 
      WHEN RIGHT(EU.[COMP WEEK],2) < SA.FISCALWEEK THEN 'Y' 
      ELSE 'N' END 
      = 'Y' 
GROUP BY 
    EU.[Store No] 
    ,SA.FISCALWEEK 
ORDER BY 
    EU.[Store No] 
+0

(결과 LINEST에 slighty를 밖으로 있지만) 서버의 경우이 작업을 가장 간단한 작업 유형으로 제한하는 것이 가장 좋습니다. 추가 및 비교 작업 인 imo는 사용할 가치가있는 유일한 작업입니다. 선형 회귀는 관계형 데이터베이스가 특히 약한 주문형 하위 집합에 대한 수학입니다. 데이터베이스에서이 작업을 수행해야합니까? 응용 프로그램 계층으로 가져 와서 제대로 빌드 된 통계 라이브러리를 사용할 수 없으며 결과를 저장하지 않을 수 있습니까? – Greenspark

+0

방금 ​​하나의 쿼리를 수행하는 것이 더 쉬워졌습니다. 매우 지저분한 Excel에서와 같이 아래 답변을보고 싶다면 지금 해결했습니다. – PeterH

답변

0

결국 그것을 밖으로 근무 당신은 SQL에서 수학을 할 수 있지만

Select 
    MYDATA3.StoreNo 
    ,slope 
    ,ybar - xbar * slope as 'Intercept' 
From 
( Select 
     MYDATA2.StoreNo 
     ,Sum((x - xbar) * (y - ybar))/Sum((x - xbar) * (x - xbar)) As 'Slope' 
     ,Max(ybar) As ybar 
     ,Max(xbar) As xbar 
    From 
    ( Select 
      MYDATA.StoreNo 
      ,avg(MYDATA.SalesVar) Over (Partition By MYDATA.StoreNO Order By FiscalWeek Rows Unbounded Preceding) as 'ybar' 
      ,MYDATA.SalesVar as 'y' 
      ,avg(MYDATA.FiscalWeek) Over(Partition By MYDATA.StoreNO Order By FiscalWeek Rows Unbounded Preceding) as 'xbar' 
      ,MYDATA.FiscalWeek as 'x' 
     From 
     ( Select 
       EU.[Store No]                   As 'StoreNo' 
       ,SA.FISCALWEEK                   As 'FiscalWeek' 
       ,Convert(DECIMAL(5,4), 
       ( Sum(Case When SA.FISCALYEAR = 2017 Then SA.SALESEXVAT/SA.EXCHANGERATEEURO END)/
        Sum(Case When SA.FISCALYEAR = 2016 Then SA.SALESEXVAT/SA.EXCHANGERATEEURO END) ) -1) As 'SalesVar' 
      From 
       [BHXSQL2014-DEV].BMANALYTICS.DBO.EUACTIVESTORES AS EU 
      INNER JOIN 
       [EUUKSQL01].[DASHBOARD].[DBO].[SALESAGGREGATEWEEK] AS SA 
      ON 
       EU.[Store No] = SA.BranchNo 
       And EU.[Store No] In (
       8702,8711,8701,4167,4164,4160,4169,4155,4794,4746,1701,4619,4617,8867,8878,8891,8743,8876,4806,4710,4100,4826,4148,8757,8866,8787,8821,8756 
       ) 
       And SA.Fiscalweek between 25 and 30 
      --COMP FLAG (Y=COMP WEEK, N=NONCOMP WEEK, 'WHERE' STATEMENT EXCLUDES NON COMP WEEKS) 
       AND Case When LEFT(EU.[COMP WEEK],4) < 2017 Then 'Y' 
         When RIGHT(EU.[COMP WEEK],2) < SA.FISCALWEEK Then 'Y' 
         Else 'N' END 
         = 'Y' 
      Group BY 
       EU.[Store No] 
       ,SA.FISCALWEEK 
       ) MYDATA ) MYDATA2 
    Group BY 
     MYDATA2.StoreNo) MYDATA3