My boss is asking me for some Sci Fi stuff.
We have n machines that print jobs and every so often get maintenance on them.
He wants to know how many impressions we ran on each machine between each service.
So, I put together a view that pulls the machine id, each time was used - Usage Date, Job Number, Impressions.
I am trying to figure out how to write my group by statement so that it shows me something like this:
ScreenNumber Maint Date Impressions
A1 8/19/2016 701
A1 10/12/2016 645
A1 11/3/2016 7
where the 200 impressions in the first line are a sum of all impressions made on machine A1 after the first maintenance recorded 8/19/16 and before 10/12/16,
500 = sum (impressions) where usagedate>10/12/16 and < 11/3/16.
I tried to upload the raw data, but new users cannot upload files unfortunately.
Admin, please give me permission to upload files. Thank you!*
This is the code that I have so far:
select distinct
sn.ScreenNumber,
sr.PONumber,
sr.ReceiptDate,
sum(grosscount) Over (partition by sn.screennumber,sr.ponumber) as Impressions
from dbo.MSI_ScreenNumbers sn
left join dbo.MSI_ScreenClockIns sc on sn.screennumber=sc.screennumber
left join dbo.MSI_ScreenReceipts sr on sr.ScreenNumber=sn.ScreenNumber
left join OrderValue on ordervalue.JobNumber=sc.JobNumber
INNER JOIN OrderQtyTable ON OrderValue.JobNumber = OrderQtyTable.JobNumber
AND OrderValue.ComponentNumber = OrderQtyTable.ComponentNumber
AND OrderValue.QuantityLineNo = OrderQtyTable.QuantityLineNo
INNER JOIN OrderProcess ON OrderValue.JobNumber = OrderProcess.JobNumber
AND OrderValue.ComponentNumber = OrderProcess.ComponentNumber
AND OrderValue.GroupNo = OrderProcess.GroupNo
AND OrderValue.ItemNumber = OrderProcess.ItemNumber
AND OrderValue.PartNumber = OrderProcess.PartNumber
INNER JOIN OrderComponent ON OrderValue.JobNumber = OrderComponent.JobNumber
AND OrderValue.ComponentNumber = OrderComponent.ComponentNumber
AND OrderValue.QuantityLineNo = OrderComponent.QtyOrdIndex
where not(ordercomponent.description like 'FAI%' or ordercomponent.description like '%FPA%' or ordercomponent.description like '%charge%')
and ordervalue.JobNumber=sc.jobnumber
and ordervalue.groupno=5
and OrderComponent.ComponentNumber=1
and sc.ScreenNumber <>'' and sc.ScreenNumber is not null
and not(CDPDF like '%overlay%' or CDPDF like '%spacer%')
--and sc.JobNumber='412001'
group by sn.ScreenNumber,ReceiptDate, usagedate,GrossCount, PONumber
having sc.UsageDate>=sr.ReceiptDate
I get:
ScreenNumber Maint Date Impressions
A1 8/19/2016 1353
A1 10/12/2016 652
A1 11/3/2016 7
While the group by does the job, it returns ALL the impressions on that machine on the first line, because they all happened after or on the maintenance date, and basically just the last sum of impressions is correct, since the last maintenance date.
I don't know what to do next.
Thank you,
Julia.