|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Two Pass Update - best way?I have a table that contains data that needs to be ranked. There are actually 2 columns that need to be ranked. I have already completed the task but did it in a "Brute Force" way. I created a datatable did a select (got 72,000 recs) and order by. Looped thru the dt updating each record with the ranking value and accepting changes. I copied that program and used the new criteria for selection (got 33,000 recs) and order by went thru the same process again. It worked....BUT..... I know there's a better way (more efficient) - I just don't know what it is. The "Brute Force" way updates 95,000 records. It seems if I could order by the selected datatable from the first pass I could get away with only 72,000 updates. Basically I need to change the order by on the same datatable as the first pass. When I thought of how to issue a plain "order by" I thought I would have to do a new select against the datasource which would eliminate the updates in the first pass unless I did an update and accept changes. What's a better way to accomplish this? Pseudo Code Below. Thanks, Hexman ========================================================= SELECT * from AnalysisTbl WHERE ANDate > '07/31/06' and ANDate < '09/01/06' ORDER BY ANProdLn, ANStockLvl Loop thru datatable If change in ANProdLn reset RANK to 1 put RANK in row update datatable increment RANK accept changes go to loop again ================Second Pass ============================== SELECT * from AnalysisTbl WHERE ANDate > '07/31/06' and ANDate < '09/01/06' ORDER BY ANCustomer, ANItem, ANSoldQty Loop thru datatable If change in ANCustomer or ANItem reset RANK to 1 put RANK in row update datatable increment RANK accept changes go to loop again Hexman,
Be aware that if you are using loops while there is a class method which does something, that class method is most probably doing the looping behind the scene. Using your own loops will not affect the performance much. One move of the window on the screen cost normally much more time than any in memory process. It can even be that your own loop will be faster than a given method, because those methods sometimes have overhead. The advance from using a class method, however, is that your code will probably be more compact and therefore better readable because it is as well uniform. Just my idea reading your message. Cor Show quoteHide quote "Hexman" <Hex***@binary.com> schreef in bericht news:fclqh2p3roonepjfiu868tqbn5lannk19p@4ax.com... > Hello Again, > > I have a table that contains data that needs to be ranked. There are > actually 2 columns that need to be ranked. I have already completed the > task > but did it in a "Brute Force" way. I created a datatable did a select (got > 72,000 recs) and order by. Looped thru the dt updating each record with > the ranking value and accepting changes. I copied that program and used > the new criteria for selection (got 33,000 recs) and order by went thru > the > same process again. It worked....BUT..... I know there's a better way > (more efficient) - I just don't know what it is. The "Brute Force" way > updates > 95,000 records. It seems if I could order by the selected datatable from > the first pass I could get away with only 72,000 updates. > > Basically I need to change the order by on the same datatable as the first > pass. When I thought of how to issue a plain "order by" I thought I would > have to do a new select against the datasource which would eliminate the > updates in the first pass unless I did an update and accept changes. > > What's a better way to accomplish this? > > Pseudo Code Below. > > Thanks, > > Hexman > > > ========================================================= > SELECT * from AnalysisTbl > WHERE ANDate > '07/31/06' and ANDate < '09/01/06' > ORDER BY ANProdLn, ANStockLvl > > Loop thru datatable > If change in ANProdLn reset RANK to 1 > put RANK in row > update datatable > increment RANK > accept changes > go to loop again > > ================Second Pass ============================== > SELECT * from AnalysisTbl > WHERE ANDate > '07/31/06' and ANDate < '09/01/06' > ORDER BY ANCustomer, ANItem, ANSoldQty > > Loop thru datatable > If change in ANCustomer or ANItem reset RANK to 1 > put RANK in row > update datatable > increment RANK > accept changes > go to loop again
String -> StringBuilder Optimization
Create new "me" Think BEFORE you post. Or in MsgBox Function What in the world is my prof trying to say? Dealing with MsgBox How to figure this one out - "The isnull function requires 2 argument(s)" vb.net 2003 Data Wizard Form UserControl(?) Question how to find specific date? refrence a form object using a varible. |
|||||||||||||||||||||||