Mysql query to get the first record for a set

Mysql query to get the first record for a set.

For each Acct# I want to get the old (first) deposit

Here is my data
Acct#  Date           Deposit
Smith  01-Jan-10   100.00
Smith  01-Feb-10   200.00
Jones  01-Mar-10   50.00
Brown 01-Jan-10   10.00
Brown 01-Apr-10   20.00


I want the result
Acct#  Date           Deposit
Smith  01-Jan-10   100.00
Jones  01-Mar-10   50.00
Brown 01-Jan-10   10.00
pmsguyAsked:
Who is Participating?
 
dozenmattaConnect With a Mentor Commented:
Try something like:

Select AcctNum, Max(TrxDate), Deposit
from Accounts
group by TrxDate

0
 
dozenmattaConnect With a Mentor Commented:
Sorry, i meant

Try something like:

Select AcctNum, Max(TrxDate), Deposit
from Accounts
group by AcctNum
0
 
dirknibleckConnect With a Mentor Commented:
Use MIN(TrxDate) to get the oldest (first) record, otherwise dozenmatta has it correct.
0
Improve Your Query Performance Tuning

In this FREE six-day email course, you'll learn from Janis Griffin, Database Performance Evangelist. She'll teach 12 steps that you can use to optimize your queries as much as possible and see measurable results in your work. Get started today!

 
pmsguyAuthor Commented:
Let me rephrase my question.

For each Acct# I want to get the old (first) deposit and sum all the deposits in 1 sql statement.

I assume a sub query is needed to get the old (first) deposit.
0
 
dirknibleckConnect With a Mentor Commented:
Ok. If you just want the amount of the first deposit (or deposits on the first date)...:

SELECT AcctNum, first_deposit, SUM(Deposit)

FROM Accounts, (SELECT AcctNum, MIN(TrxDate) as first_deposit FROM Accounts GROUP BY AcctNum) as agg

WHERE Accounts.AcctNum = agg.AcctNum AND Accounts.TrxDate = agg.first_deposit
0
 
dirknibleckConnect With a Mentor Commented:
* Add *

GROUP BY AcctNum, first_deposit
0
 
danrosenthalConnect With a Mentor Commented:
I think this would work:

SELECT d.AcctNo, d.Date, d.Deposit
FROM Data d
WHERE NOT EXISTS (
      SELECT 1 FROM Data d2 WHERE d2.AcctNo = d.AcctNo AND d2.Date < d.Date
)

0
 
danrosenthalConnect With a Mentor Commented:
To get the old (first deposit) date and the sum of all deposits you would simply do this:

SELECT AcctNo, MIN(Date) AS FirstDeposit, SUM(Deposit) AS TotalDeposits
FROM Data
GROUP BY AcctNo
0
 
cyberkiwiConnect With a Mentor Commented:
In case you have 2 deposits on the same first day, this will still work

select `Acct#`, Min(`Date`) `Date`, Min(FirstDeposit) FirstDeposit, Max(SumDeposit) SumDeposit
from
(
select `Acct#`, `Date`, Deposit,
  @d:=case when @a=`Acct#` then null else Deposit end as FirstDeposit,
  @s:=case when @a=`Acct#` then @s+ifnull(Deposit,0) else Deposit end as SumDeposit,
  @a:=`Acct#` as Discard
from (select @a:=null,@d:=null,@s:=null) r, mydata
order by `Acct#`, `Date` ASC
) n
group by `Acct#`
order by `Acct#`
0
 
cyberkiwiConnect With a Mentor Commented:
In my previous query, the columns are to be interpreted:

`Acct#` - account
Min(`Date`) `Date`  - date of first deposit
Min(FirstDeposit) FirstDeposit   - amount of first deposit
Max(SumDeposit) SumDeposit   - total of all deposits
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.