|
Ah, good point. I don't think you can. You could use a Global temporary table instead. DECLARE GLOBAL TEMPORARY TABLE AS ( SELECT SCACCODE,TRLRNUM,ASNNUM,ORDERTYP,ORDERNUM,MIN(FDATE) AS FDATE FROM SSW85 GROUP BY SCACCODE, TRLRNUM, ASNNUM, ORDERTYP, ORDERNUM ); DELETE FROM SSW85 A Where not exists( select * from (preserve P where A.SCACODE = P.SCACODE AND A.TRLRNUM = P.TRLRNUM AND A.ASNNUM = P.ASNNUM AND A.ORDERTYP = P.ORDERTYP AND A.ORDERNUM = P.ORDERNUM AND A.FDATE = P.FDATE ); Notice, that you have two separate statements now. If you want a single statement, you could try... DELETE FROM SSW85 A Where not exists( select * from ( SELECT SCACCODE,TRLRNUM,ASNNUM,ORDERTYP,ORDERNUM,MIN(FDATE) AS FDATE FROM SSW85 GROUP BY SCACCODE, TRLRNUM, ASNNUM, ORDERTYP, ORDERNUM) P where A.SCACODE = P.SCACODE AND A.TRLRNUM = P.TRLRNUM AND A.ASNNUM = P.ASNNUM AND A.ORDERTYP = P.ORDERTYP AND A.ORDERNUM = P.ORDERNUM AND A.FDATE = P.FDATE ) But I've got doubts on performance.... Charles Wilt -- iSeries Systems Administrator / Developer Mitsubishi Electric Automotive America ph: 513-573-4343 fax: 513-398-1121 > -----Original Message----- > From: midrange-l-bounces@xxxxxxxxxxxx > [mailto:midrange-l-bounces@xxxxxxxxxxxx] On Behalf Of DeLong, Eric > Sent: Tuesday, May 16, 2006 3:45 PM > To: 'Midrange Systems Technical Discussion' > Subject: RE: SQL Ideas Please > > Can you use common table expressions with the DELETE > statement? I have just > come out of V5R1, and haven't played with V5R3 much yet.... > > Eric DeLong > Sally Beauty Company > MIS-Project Manager (BSG) > 940-297-2863 or ext. 1863 > > > > -----Original Message----- > From: midrange-l-bounces@xxxxxxxxxxxx > [mailto:midrange-l-bounces@xxxxxxxxxxxx]On Behalf Of Wilt, Charles > Sent: Tuesday, May 16, 2006 2:36 PM > To: Midrange Systems Technical Discussion > Subject: RE: SQL Ideas Please > > > Can you use a join-table clause in a delete statement? > > I didn't think so, but maybe. > > If not try: > WITH preserve AS ( > SELECT SCACCODE,TRLRNUM,ASNNUM,ORDERTYP,ORDERNUM,MIN(FDATE) > AS FDATE > FROM SSW85 > GROUP BY SCACCODE, TRLRNUM, ASNNUM, ORDERTYP, ORDERNUM > ) > DELETE FROM SSW85 A > Where not exists( select * > from preserve P > where A.SCACODE = P.SCACODE AND > A.TRLRNUM = P.TRLRNUM AND > A.ASNNUM = P.ASNNUM AND > A.ORDERTYP = P.ORDERTYP AND > A.ORDERNUM = P.ORDERNUM AND > A.FDATE = P.FDATE > ) > > > The same format would work for the first request to: > WITH preserve AS ( > SELECT distinct SCACCODE,TRLRNUM,ASNNUM,ORDERTYP,ORDERNUM > FROM SSW85 > ) > DELETE FROM SSW85 A > Where not exists( select * > from preserve P > where A.SCACODE = P.SCACODE AND > A.TRLRNUM = P.TRLRNUM AND > A.ASNNUM = P.ASNNUM AND > A.ORDERTYP = P.ORDERTYP AND > A.ORDERNUM = P.ORDERNUM > ) > > HTH, > > Charles Wilt > -- > iSeries Systems Administrator / Developer > Mitsubishi Electric Automotive America > ph: 513-573-4343 > fax: 513-398-1121 > > > > -----Original Message----- > > From: midrange-l-bounces@xxxxxxxxxxxx > > [mailto:midrange-l-bounces@xxxxxxxxxxxx] On Behalf Of Elvis Budimlic > > Sent: Tuesday, May 16, 2006 3:23 PM > > To: 'Midrange Systems Technical Discussion' > > Subject: RE: SQL Ideas Please > > > > Brian, I'm not sure I fully understood you (especially > > DISTINCT part - SQL > > keyword?) so make sure you test this on a dummy/copied file first. > > Alternatively, just run the SELECT part on its own to verify > > that projected > > rows are ones you want to preserve. > > > > WITH preserve AS ( > > SELECT SCACCODE,TRLRNUM,ASNNUM,ORDERTYP,ORDERNUM,MIN(FDATE) > > AS FDATE > > FROM SSW85 > > GROUP BY SCACCODE, TRLRNUM, ASNNUM, ORDERTYP, ORDERNUM) > > DELETE FROM SSW85 A, preserve P > > WHERE A.SCACODE = P.SCACODE AND > > A.TRLRNUM = P.TRLRNUM AND > > A.ASNNUM = P.ASNNUM AND > > A.ORDERTYP = P.ORDERTYP AND > > A.ORDERNUM = P.ORDERNUM AND > > A.FDATE <> P.FDATE > > > > Elvis > > > > -----Original Message----- > > Subject: SQL Ideas Please > > > > Hi All, > > > > (This is a two-part SQL question) > > > > Can someone tell me if there is an easy way to delete records from a > > table where there are only four data elements on which I > wish to base > > the delete routine? For example, I have a table that has numerous > > records in it. I want to delete all records other than those > > that have > > a distinct SCACCODE, TRLRNUM, ASNNUM, ORDERTYP and > ORDERNUM. However, > > I'm not sure how to express this in SQL, but in pseudo-code, > > I'd like to > > do this: > > > > DELETE ALL RECORDS IN SSW85 EXECPT THOSE RECORDS THAT HAVE > A DISTINCT > > (SCACCODE, TRLRNUM, ASNNUM, ORDERTYP, ORDERNUM). > > > > My second SQL statement needs to pass over the records > again and only > > keep records that have the minimum number for a specific > column. For > > example, if I have these records: > > > > A B C D E F > > > > ABCD 1000 10039210 2 105049 206052971 > > ABCD 1000 10039210 2 105049 206052951 > > ABCD 1000 10039210 2 105049 206052991 > > ABCD 1000 10039210 2 105049 206053001 > > > > I only want to keep one of these records that has the > minimum value in > > column F. So if I ran a min(COLUMN_F) on this, I would > only get back > > the second record (since it is the lowest number for Column F). > > Pseudo-code wise, I'd need something like: > > > > DELETE ALL RECORDS IN SSW85 EXCEPT EACH DISTINCT (SCACCODE, TRLRNUM, > > ASNNUM, ORDERTYP, ORDERNUM) WITH THE LOWEST KDLOTSTR. > > > > Is there an easy way to do both of these statements (or combine them > > into one statement)? > > > > Thanks! > > > > Brian. > > > > > > -- > > This is the Midrange Systems Technical Discussion > > (MIDRANGE-L) mailing list > > To post a message email: MIDRANGE-L@xxxxxxxxxxxx > > To subscribe, unsubscribe, or change list options, > > visit: http://lists.midrange.com/mailman/listinfo/midrange-l > > or email: MIDRANGE-L-request@xxxxxxxxxxxx > > Before posting, please take a moment to review the archives > > at http://archive.midrange.com/midrange-l. > > > > > > -- > This is the Midrange Systems Technical Discussion > (MIDRANGE-L) mailing list > To post a message email: MIDRANGE-L@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/midrange-l > or email: MIDRANGE-L-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/midrange-l. > > > -- > This is the Midrange Systems Technical Discussion > (MIDRANGE-L) mailing list > To post a message email: MIDRANGE-L@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/midrange-l > or email: MIDRANGE-L-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/midrange-l. > >
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.