나는 월별 값이있는 테이블을 가지고 있으며이 값을 2 개월 단위로 분산시키는 주를 고려하여이 값을 스프레드의 각 부분에 반영해야한다고 생각합니다. 월 및 체중을 각 달에 해당하는 일 수로 나타냅니다.SQL 스프레드 월 값을 주 단위로 입력
예를 들어 나는
Product Week Price
-------------------------------------------
Steel 06-Jan-14 100
Steel 13-Jan-14 100
Steel 20-Jan-14 100
Steel 27-Jan-14 128.57
Steel 03-Feb-14 200
Steel 10-Feb-14 200
Steel 17-Feb-14 200
을 다음과 같이 위에서보다시피 나는 주로 변환 할 필요가 달
Product Month Price
------------------------------------
Steel 1/Jan/2014 100
Steel 1/Feb/2014 200
Steel 1/Mar/2014 300
가 겹치는 주 강철의 다른 가격으로 테이블이 1 월과 2 월 사이의 값은 다음과 같이 계산되어야합니다.
(100*5/7)+(200*2/7)
이것은 안녕 27 일주일은 1 월에 5 일, 2 월에 2 일이됩니다.
SQL에서이를 달성 할 수있는 방법을 만들 수 있습니까?
select
WD.week,
PM.PRICE,
DATEADD(m,1,PM.Month),
SUM(PM.PRICE/7) * COUNT(*)
from
( select '2014-1-1' as Month, 100 as PRICE
union
select '2014-2-1' as Month, 200 as PRICE
)PM
join
( select '2014-1-20' as week
union
select '2014-1-27' as week
union
select '2014-2-3' as week
)WD
ON WD.week>=PM.Month
AND WD.week < DATEADD(m,1,PM.Month)
group by
WD.week,PM.PRICE, DATEADD(m,1,PM.Month)
이 나에게주는
week PRICE
2014-1-20 100 2014-02-01 00:00:00.000 14
2014-1-27 100 2014-02-01 00:00:00.000 14
2014-2-3 200 2014-03-01 00:00:00.000 28
나는 또한 시도
다음
;with x as (
select price,
datepart(week,dateadd(day, n.n-2, t1.month)) wk,
dateadd(day, n.n-1, t1.month) dt
from
(select '2014-1-1' as Month, 100 as PRICE
union
select '2014-2-1' as Month, 200 as PRICE) t1
cross apply (
select datediff(day, t.month, dateadd(month, 1, t.month)) nd
from
(select '2014-1-1' as Month, 100 as PRICE
union
select '2014-2-1' as Month, 200 as PRICE)
t
where t1.month = t.month) ndm
inner join
(SELECT (a.Number * 256) + b.Number AS N FROM
(SELECT number FROM master..spt_values WHERE type = 'P' AND number <= 255) a (Number),
(SELECT number FROM master..spt_values WHERE type = 'P' AND number <= 255) b (Number)) n --numbers
on n.n <= ndm.nd
)
select min(dt) as week, cast(sum(price)/count(*) as decimal(9,2)) as price
from x
group by wk
having count(*) = 7
order by wk
다음이 나를을 gimes :
나는 다음과 같은첫 번째 시도 시도
week price
2014-01-07 00:00:00.000 100.00
2014-01-14 00:00:00.000 100.00
2014-01-21 00:00:00.000 100.00
2014-02-04 00:00:00.000 200.00
2014-02-11 00:00:00.000 200.00
2014-02-18 00:00:00.000 200.00
감사 사실
어떤 RDBMS를 사용하고 있습니까? MySQL은? 신탁? SQL Server? ...? –
Microsoft SQL Server를 사용하고 있습니다. 죄송합니다. 전에 언급하지 않으 셨습니다. – Selrac
Anup, 나는 약간의 노력을 잃어 버렸습니다. 내가 얻은 가장 가까운 것은 주 테이블에 추가 '월'필드를 추가하여 한 주일 테이블에 가입하려고했을 때입니다. 문제는 겹치는 주간에 값을 분산시키지 않는다는 것입니다. – Selrac