Solved

Trying to pull a list of distinct IDs

Posted on 2008-10-07
3
251 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

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

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

I've encountered valid database schemas that do not have a primary key.  For example, I use LogParser from Microsoft to push IIS logs into a SQL database table for processing and analysis.  However, occasionally due to user error or a scheduled task…
In this article we will get to know that how can we recover deleted data if it happens accidently. We really can recover deleted rows if we know the time when data is deleted by using the transaction log.
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…

867 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

18 Experts available now in Live!

Get 1:1 Help Now