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 |
|
SQLSoaker
Posting Yak Master
169 Posts |
Posted - 2009-07-29 : 12:55:54
|
| Hi I have the following Query:SELECT INVENTTABLE.ITEMID, INVENTTABLE.ITEMNAME, INVENTTRANS.DATEPHYSICAL, ISNULL((INVENTSUM.POSTEDQTY + INVENTSUM.RECEIVED - INVENTSUM.DEDUCTED + INVENTSUM.REGISTERED - INVENTSUM.PICKED), 0) AS ONHANDFROM INVENTTABLEINNER JOIN INVENTTRANS ON INVENTTABLE.DATAAREAID = INVENTTRANS.DATAAREAID AND INVENTTABLE.ITEMID = INVENTTRANS.ITEMIDINNER JOIN INVENTSUM ON INVENTTABLE.ITEMID = INVENTSUM.ITEMID AND INVENTTABLE.DATAAREAID = INVENTSUM.DATAAREAIDWHERE INVENTTABLE.DATAAREAID = 'MEX' AND INVENTTRANS.TRANSTYPE = '0' Some data from the 3 tables:INVENTTABLEItemID0000100002INVENTTRANSItemID DatePhysical00001 2009-5-1400001 2008-5-1500001 2009-5-1300002 2009-8-0800002 2009-9-08INVENTSUMItemID PostedQty00001 50000001 000001 60000002 20000002 300I want my select statement to come back with 1-1 relations. Currently inner joining this data gives multiple records for the 1:N relation.I need to grab the PHYSICALDATE closests todays date but I'm not quite sure how to accomplish this.Currently the query outputs:00001 name1 2009-5-14 50000001 name1 2008-5-15 000001 name1 2009-5-13 60000002 name2 2009-8-18 20000002 name2 2009-9-08 300I need the query to grab the date closest to today and 1-1:00001 name1 2009-5-14 50000002 name2 2009-9-08 300Any ideas? Thanks in advance for your help. |
|
|
ceerock
Starting Member
1 Post |
Posted - 2009-07-29 : 16:24:15
|
| SELECT INVENTTABLE.ITEMID, INVENTTABLE.ITEMNAME, INVENTTRANS.DATEPHYSICAL, ISNULL((INVENTSUM.POSTEDQTY + INVENTSUM.RECEIVED - INVENTSUM.DEDUCTED + INVENTSUM.REGISTERED - INVENTSUM.PICKED), 0) AS ONHANDFROM INVENTTABLEINNER JOIN INVENTTRANS ON INVENTTABLE.DATAAREAID = INVENTTRANS.DATAAREAID AND INVENTTABLE.ITEMID = INVENTTRANS.ITEMIDINNER JOIN INVENTSUM ON INVENTTABLE.ITEMID = INVENTSUM.ITEMID AND INVENTTABLE.DATAAREAID = INVENTSUM.DATAAREAIDINNER JOIN (--Creates a one to one between item id and dateSELECT INVENTTABLE.ITEMID, MAX(INVENTTRANS.DATEPHYSICAL AS MAXDATEFROM INVENTTABLE INNER JOIN INVENTTRANS ON INVENTTRANS.ITEMID = INVENTTABLE.ITEMIDGROUP BY INVENTTABLE.ITEMID) AS MAXID ON INVENTTABLE.ITEMID = MAXID.ITEMID AND INVENTTRANS.DATEPHYSICAL = MAXID.MAXDATEWHERE INVENTTABLE.DATAAREAID = 'MEX' AND INVENTTRANS.TRANSTYPE = '0'Hope this helps...Does the INVENTTRANS and INVENTSUM TABLES have Primary Key's? |
 |
|
|
SQLSoaker
Posting Yak Master
169 Posts |
Posted - 2009-07-29 : 16:55:51
|
| Thanks, ceerock, I am going to test this tomorrow and I'll let you know. The primary keys for both of those tables are itemid along with a few other fields. |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2009-07-30 : 14:00:25
|
| dont you have a unique valued column in INVENTSUM table? |
 |
|
|
|
|
|
|
|