Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
ahmeterispaha
Starting Member
19 Posts |
Posted - 2008-03-31 : 15:30:10
|
Can anyone suggest how to make this query better? I need to get a list of parts that had an 'ADJ-QTY' transaction after a 'MFG-STK' transaction this year. Let's assume there are three fields in the transaction table -- partnum, trantype, and trandate. I'm getting the results I need using temp tables but I suspect there is a more efficient way to do this? Here's my query:CREATE TABLE #ADJQTY (PartNum varchar(50), TranType varchar(7), TranDate datetime)INSERT INTO #ADJQTY (PartNum, TranType, TranDate)SELECT partnum,trantype,trandateFROM parttranWHERE (trandate > '2007-12-31') AND (trantype = 'ADJ-QTY')CREATE TABLE #MFGSTK (PartNum varchar(50), TranType varchar(7), TranDate datetime)INSERT INTO #MFGSTK (PartNum, TranType, TranDate)SELECT partnum,trantype,trandateFROM parttranWHERE (trandate > '2007-12-31') AND (trantype = 'MFG-STK')SELECT DISTINCT(a.PartNum) FROM #ADJQTY aINNER JOIN #MFGSTK m on a.PartNum = m.PartNumWHERE a.TranDate>=m.TranDateDROP TABLE #MFGSTKDROP TABLE #ADJQTY |
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2008-03-31 : 15:43:50
|
This is untested, but I think you can do something like the following. but, you'd have to test it to see if it is faster or not. SELECT DISTINCT A.PartNumFROM PartTran AS AINNER JOIN PartTran AS B ON A.PartNum = B.PartNum AND A.TranDate > '20071231' AND A.TranType = 'ADJ-QTY' AND B.TranDate > '20071231' AND B.TranType = 'MFG-STK' AND A.TranDate >= B.TranDate EDIT: Forgot tran type |
 |
|
jimf
Master Smack Fu Yak Hacker
2875 Posts |
Posted - 2008-03-31 : 15:47:14
|
SELECT a.partnum FROM parttran aINNER JOIN (select partnum,[TranDate] = max(trandate) from parttran where trantype = 'MFG-STK' and trandate > '2007-12-31' group by partnum) bON a.partnum = b.partnumWHERE a.trantype = 'ADJ-QTY' and a.trandate >= b.trandateJim |
 |
|
ahmeterispaha
Starting Member
19 Posts |
Posted - 2008-04-02 : 10:56:33
|
Thank you Lamprey and Jim for your responses.Lamprey - your query returned my expected results and ran on average 44% faster than my query!Jim - although your query ran 32% faster than mine, the results were also different. Here are my expected results:006416386P004006517964P0050165B7993P0040181C1188P0310181C1188P0320181C1188P0330181C1188P0390181C1188P0400254C0873P0080265C0341G0040265C0341P0180285B0692P0010366A07017040422A0775P0010687C0960G0090687C0960P0140687C0960P0150687C0960P01610S1000110S1500112C2320212S1500112S400112S750122C100H121422C100H67922C100H74930S200130S250239277940C197T0340S267T0140S31S0140S8081L40S8081R44C1460744C1460860S38S01-S62C100S01-S62S48S01-SC105008C105701C107601C122101C123007C123401C1242201C125008C22100H1215C22100H680C22100H750C22100H750 ReworkC2210204C2222902C2260H750C3230002C80135X01C80135X02C80146X03S1010001S102501S104001S105002S121501S124001S124002S125001S127501S205001S301301S301901S302502S303801S8002W01S8010F02S8013B05S8013S01S8013X04 Here are Jim's results:006416386P004006517964P0050165B7993P0040165B7993P0040165B7993P0040165B7993P0040181C1188P0310181C1188P0320181C1188P0330181C1188P0390181C1188P0400254C0873P0080254C0873P0080254C0873P0080265C0341G0040265C0341G0040265C0341P0180265C0341P0180285B0692P0010422A0775P0010422A0775P0010687C0960G0090687C0960G0090687C0960P0140687C0960P0140687C0960P0140687C0960P0150687C0960P01610S1000110S1500112S1500112S1500112S400112S400112S750130S200130S200130S250240S267T0140S31S0140S8081L40S8081L40S8081R44C1460760S38S01-S62S48S01-S62S48S01-SC105008C105008C105008C107601C107601C107601C107601C125008C125008C125008C22100H750 ReworkC2210204C2222902C2222902C2222902C2260H750C2260H750C80146X03S102501S105002S121501S121501S124001S124002S124002S127501S205001S301301S301301S301901S303801S8002W01S8002W01S8013B05S8013B05S8013S01S8013X04S8013X04Thanks again to you both. |
 |
|
|
|
|
|
|