• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Need help with a 3 table join query

Participant ,
Jun 18, 2010 Jun 18, 2010

Copy link to clipboard

Copied

I'm writing reports from data that comes from a 3rd party subscription. The data has not been normalized as you will read.

Requirement: Rank top 3 Dams by the money earned by their foals. List DamID, DamName, and MoneyEarnedByHerFoals (SumOfAmountWon).

A "Foal" is the horse that races, the "Dam" is that race horses mother. The Dam owner will be compensated based on the performance of her foals. A Dam may have many foals active in a year. A foal may earn money many times in a year.

Tables:

Races: Horse race results for calendar year. One record for each performance that earned money.

OBN (FoalID)     Amount (Foal Earnings) RaceDate

10                      500                              02/02/2010

20                      1000                            02/02/2010

20                      1000                            03/02/2010

30                      500                              03/02/2010

40                      500                              04/02/2010

50                      1000                            04/02/2010

Racestck: Foal details. This table is a problem. There are often more that one record per foal in this table as one is added when ownership changes. I have no control over this and need a Distinct view of this table.

OBN (FoalID) DamID Breed Owner

10                 100      TB      Joe

10                 100      TB      Mary

20                 200      TB      Sue

30                 100      TB      Mike

40                 200      TB      Joe

50                 100      TB      Joe

DamSire: Dam Details. This table is a problem. There are often more that one record per Dam in this table as one is added when ownership changes. I have no control over this and need a Distinct view of this table.

OBN (DamID) HName (HorseName) Owner

100                BigMomma                Smith

200                TrackMom                 Jones

100                BigMomma                Green

Query:

This is the query so far. It applies the Distinct keyword to the Dam Table and the results are accurate if there are no duplicate OBN's in the Racestck table. I've tried to get a "distinct" view of the racestck table as well but I can't figure it out. Everything I try applies the distinct to the SumOfAmountWon as well and that does no good...

<cfquery name="getWinningDams" datasource="#SelectedFolder#">
  SELECT TOP 3 D.OBN, Sum(R.Amount) AS SumOfAmountWon, D.HName
  FROM (Racestck F INNER JOIN Races R ON F.OBN = R.OBN)
  INNER JOIN (SELECT DISTINCT OBN, HName FROM DamSire
  ) D ON F.DamOBN = D.OBN
  Where F.Breed='TB'
  GROUP BY D.OBN, D.HName
  ORDER BY 2 DESC
</cfquery>

Thank you for taking the time to read...

Lyndon

TOPICS
Advanced techniques

Views

634

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Jun 19, 2010 Jun 19, 2010

Copy link to clipboard

Copied

In the problem tables, are there no fields that might help you identify the current owner?  A date field would help. 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Jun 19, 2010 Jun 19, 2010

Copy link to clipboard

Copied

There is a column "OWNSSNEXT" (Owner SSN Extension) that is an incrementing alpha. Original Owner is "A" fourth owner is "D". So I guess Max(OWNSSNEXT) is the current Owner.

Lyndon

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Jun 19, 2010 Jun 19, 2010

Copy link to clipboard

Copied

You put that max(ownsnext) in a subquery.

select etc

from table t join

(select field, max(ownsnext) theowner

group by field) sq on t.field = sq.field and t.ownsnext= theowner

etc

You have to give your subquery an alias when you do this.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Jun 22, 2010 Jun 22, 2010

Copy link to clipboard

Copied

LATEST

I have a sloution. Thanks Dan.

SELECT TOP 3 D.OBN, Sum(R.Amount) AS SumOfAmountWon, D.HName
FROM (Racestck F INNER JOIN Races R ON F.OBN = R.OBN)
INNER JOIN (SELECT DISTINCT OBN, HName FROM DamSire
) D ON F.DamOBN = D.OBN
Where F.Breed='TB'
And UCase(F.OWNSSNEXT)<'B'
GROUP BY D.OBN, D.HName
ORDER BY 2 DESC

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources
Documentation