so I need to find the highest and second highest date from every SKU(number) and compare these 2 dates and see if there is a 3 months difference.
down below is my code I already found the second highest date but I can’t seem to make it work with a highest date in combination anyone for the rescue ?
code :
x
WITH X0 AS (
SELECT
od.odscheduleid
,lc.shortname as line
,ar.erpcode as SKU
,ar.shortname as Article
,od.[PlannedEndInflow] as PlannedEndInflow
,od.[PlannedStartInflow] as PlannedStartInflow
,st.shortname as 'status'
,od.[ShortName] as 'order'
,od.[ERPCode] as ERPCode
,od.[ASCode] as ASCode
,od.[PlannedQuantity] as PlannedQuantityPC
,cast(od.[PlannedQuantity]*ar.Volume/100 as decimal(12,2)) as PlannedQuantityHL
,od.[PlannedChangeoverTime] as PlannedChangeoverTime
,od.[PlannedSpeed] as PlannedSpeed
,od.[PlannedSpeedRatio] as PlannedSpeedRatio,
ROW_NUMBER()over(partition by ar.erpcode order by od.PlannedEndInflow desc) as rn
FROM (
[RM].[TblDatODSchedule] od
inner join [EM].[TblLstLocation] lc on od.locationid=lc.locationid
inner join [RM].[TblLstART] ar on od.artid=ar.artid
inner join [EM].[TblLstStatus] st on od.statusid=st.statusid
)
where lc.ShortName = 'fil 3'--replaces lc.shortname in (@line)(reportserver)
), X1 AS (
SELECT SKU,PlannedEndInflow, RN FROM X0 WHERE RN=2
), X2 AS (
SELECT SKU, line ,Article, PlannedStartInflow,PlannedEndInflow,PlannedQuantityPC,PlannedQuantityHL,PlannedChangeoverTime,PlannedSpeed,PlannedSpeedRatio,ERPCode,ASCode, PlannedEndInflow as most_recent_date , RN FROM X0 WHERE RN=1
)
SELECT
case when DATEDIFF(day,X1.PlannedEndInflow,most_recent_date) >=91 then DATEDIFF(day,X1.PlannedEndInflow,most_recent_date)*0.0328549112
-- when exists( select 1 from x1 where x1.sku = x2.SKU having count(sku) > 1) then 123
else null end as MONTHDIFF,
--SELECT DATEDIFF(day, X1.PlannedEndInflow,most_recent_date) AS MONTHDIFF,
line,X1.SKU,article,PlannedStartInflow,x2.PlannedEndInflow,x1.PlannedEndInflow,PlannedChangeoverTime,PlannedSpeed,PlannedSpeedRatio,ERPCode,ASCode,PlannedQuantityPC,PlannedQuantityHL
FROM X1
left JOIN X2 ON X1.SKU=X2.SKU
where most_recent_date >='20200410' -- replaces most_recent_date > @starDate(reportserver)
-- add exception where never used SKU's are also shown !
Advertisement
Answer
I’m going to sketch the answer I mean rather than try to make it perfect with your query. This uses three CTEs. X0 assigns the RN value. X1 picks out where RN=1 and X2 picks out where RN=2. Then you join X1 and X2, and do your calculation.
WITH X0 AS (
SELECT somecolumns,
ROW_NUMBER()over(partition by ar.erpcode order by od.PlannedEndInflow desc) as rn
FROM ( table join table join table )
WHERE conditions
), X1 AS (
SELECT somecolumns, RN FROM X0 WHERE RN=1
), X2 AS (
SELECT somecolumns, RN FROM X0 WHERE RN=2
)
SELECT DATEDIFF(month, X1.datefield, X2.datefield) AS MONTHDIFF,
X1.othercols, X2.othercols
FROM X1
INNER JOIN X2 ON X1.something=X2.something