Solved

Trying to pull a list of distinct IDs

Posted on 2008-10-07
3
248 Views
Last Modified: 2010-03-19
I am trying to pull a list of distinct IDs. This list should contain a list of unique ProspectIDs. Currently the select statement pulls a list that contains duplicate ProspectIDs. For the duplicate ProspectIDs pulled, I want to only pull the ProspectID with the maximum ContEnd_Switch date. Please help!
SELECT ProspectID, Prospect, ContEnd_Switch, TargetPrice, SUM(MwhAct * Total) / SUM(MwhAct) AS WAverage, 

				GM_MarRate, Comm_1_Rate, Comm_2_Rate, Comm_3_Rate, Comm_4_Rate, Comm_5_Rate, Comm_6_Rate 

		FROM Prospect_Cogs 

		WHERE (Fwd_Mth BETWEEN 1 AND 12) and SRID = 1 and (Realtime in (select Realtime from tbl_realtime) ) 

		GROUP BY ProspectID, Prospect, TargetPrice, ContEnd_Switch, GM_MarRate, Comm_1_Rate, Comm_2_Rate, Comm_3_Rate, Comm_4_Rate, Comm_5_Rate, Comm_6_Rate 

		having SUM(MwhAct * Total) / SUM(MwhAct) > 0

		order by CASE 0

					  when 1 then cast(ContEnd_Switch as varchar)  -- by end contract  

					  when 2 then cast(TargetPrice as varchar)   -- Target Price 

					  when 3 then cast(SUM(MwhAct * Total) / SUM(MwhAct) as varchar) --by quoted Price

					  else Prospect    --by Prospect Name 

				 END

Open in new window

0
Comment
Question by:utlonghornjulie
3 Comments
 
LVL 32

Accepted Solution

by:
Daniel Wilson earned 500 total points
ID: 22659882
Does this do it?

SELECT ProspectID, Prospect, Max(ContEnd_Switch) as Max_ContEnd_Switch, TargetPrice, SUM(MwhAct * Total) / SUM(MwhAct) AS WAverage, 

                                GM_MarRate, Comm_1_Rate, Comm_2_Rate, Comm_3_Rate, Comm_4_Rate, Comm_5_Rate, Comm_6_Rate 

                FROM Prospect_Cogs 

                WHERE (Fwd_Mth BETWEEN 1 AND 12) and SRID = 1 and (Realtime in (select Realtime from tbl_realtime) ) 

                GROUP BY ProspectID, Prospect, TargetPrice, GM_MarRate, Comm_1_Rate, Comm_2_Rate, Comm_3_Rate, Comm_4_Rate, Comm_5_Rate, Comm_6_Rate 

                having SUM(MwhAct * Total) / SUM(MwhAct) > 0

                order by CASE 0

                                          when 1 then cast(ContEnd_Switch as varchar)  -- by end contract  

                                          when 2 then cast(TargetPrice as varchar)   -- Target Price 

                                          when 3 then cast(SUM(MwhAct * Total) / SUM(MwhAct) as varchar) --by quoted Price

                                          else Prospect    --by Prospect Name 

                                 END

Open in new window

0
 
LVL 3

Author Comment

by:utlonghornjulie
ID: 22659913
Yes it worked. Thanks!
0
 
LVL 10

Expert Comment

by:dwe761
ID: 22659926
Without a sample of your data, it's difficult to give a complete solution.  But I can offer suggestions.   Have you tried adding ContEnd_Switch  to the Having clause?  Such as below.
If this doesn't work, you may need to do it in multiple steps because you may also get duplication if there are other fields causing a problem.  You can either create a temp table or do a sub-select to pull out the duplicates and then complete your other aggregation.  
But try the simple solution first.

SELECT ProspectID, Prospect, ContEnd_Switch, TargetPrice, SUM(MwhAct * Total) / SUM(MwhAct) AS WAverage, 

				GM_MarRate, Comm_1_Rate, Comm_2_Rate, Comm_3_Rate, Comm_4_Rate, Comm_5_Rate, Comm_6_Rate 

		FROM Prospect_Cogs 

		WHERE (Fwd_Mth BETWEEN 1 AND 12) and SRID = 1 and (Realtime in (select Realtime from tbl_realtime) ) 

		GROUP BY ProspectID, Prospect, TargetPrice, ContEnd_Switch, GM_MarRate, Comm_1_Rate, Comm_2_Rate, Comm_3_Rate, Comm_4_Rate, Comm_5_Rate, Comm_6_Rate 

		having MAX(ContEnd_Switch) = ContEnd_Switch AND SUM(MwhAct * Total) / SUM(MwhAct) > 0

		order by CASE 0

					  when 1 then cast(ContEnd_Switch as varchar)  -- by end contract  

					  when 2 then cast(TargetPrice as varchar)   -- Target Price 

					  when 3 then cast(SUM(MwhAct * Total) / SUM(MwhAct) as varchar) --by quoted Price

					  else Prospect    --by Prospect Name 

				 END

Open in new window

0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

This article will describe one method to parse a delimited string into a table of data.   Why would I do that you ask?  Let's say that you need to pass multiple parameters into a stored procedure to search for.  For our sake, we'll say that we wa…
If you having speed problem in loading SQL Server Management Studio, try to uncheck these options in your internet browser (IE -> Internet Options / Advanced / Security):    . Check for publisher's certificate revocation    . Check for server ce…
This video discusses moving either the default database or any database to a new volume.
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now