Solved

Trying to pull a list of distinct IDs

Posted on 2008-10-07
3
267 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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

Optimize your web performance

What's in the eBook?
- Full list of reasons for poor performance
- Ultimate measures to speed things up
- Primary web monitoring types
- KPIs you should be monitoring in order to increase your ROI

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

INTRODUCTION: While tying your database objects into builds and your enterprise source control system takes a third-party product (like Visual Studio Database Edition or Red-Gate's SQL Source Control), you can achieve some protection using a sing…
Data architecture is an important aspect in Software as a Service (SaaS) delivery model. This article is a study on the database of a single-tenant application that could be extended to support multiple tenants. The application is web-based develope…
In this video, viewers will be given step by step instructions on adjusting mouse, pointer and cursor visibility in Microsoft Windows 10. The video seeks to educate those who are struggling with the new Windows 10 Graphical User Interface. Change Cu…
NetCrunch network monitor is a highly extensive platform for network monitoring and alert generation. In this video you'll see a live demo of NetCrunch with most notable features explained in a walk-through manner. You'll also get to know the philos…

617 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