Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 272
  • Last Modified:

Trying to pull a list of distinct IDs

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
utlonghornjulie
Asked:
utlonghornjulie
1 Solution
 
Daniel WilsonCommented:
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
 
utlonghornjulieAuthor Commented:
Yes it worked. Thanks!
0
 
dwe761Commented:
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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now