Solved

Getting last max 2 dates in the table

Posted on 2010-11-13
371 Views

I am writting a function in mysql.

I need to have sum of transactions from last 2 dates entered in the system

sum(EmailTransCount)+ sum(posttranscount)

My below function is considering last max date but I wanted to consider last max 2 dates in my below query

``````BEGIN

DECLARE totalCount INT;

Declare tranDate  Date;

select max(Transactiondate) into tranDate from dailycount where countoftheday <>0;

select (sum(EmailTransCount)+ sum(posttranscount))  INTO totalCount

from dailycount

where countoftheday <>0

and transactiondate = tranDate;

END
``````
0
Question by:tia_kamakshi
• 4
• 3
• 2
• +2

LVL 8

Accepted Solution

raulggonzalez earned 250 total points
ID: 34127216
Hi

I think you can do something like this, I couldn't test it, but I'm sure you can get the logic.

Instead of a variable with the max(date) put 2 into a temp table and join it with yours.

Hope it helps.

Cheers
``````DECLARE totalCount INT;

Declare tranDate  Date;

CREATE TEMPORARY TABLE dates(tranDate Date);

INSERT INTO dates
(SELECT Transactiondate
from dailycount
where countoftheday <>0
ORDER BY Transactiondate DESC
LIMIT 2);

select (sum(EmailTransCount)+ sum(posttranscount))  INTO totalCount

from dailycount
INNER JOIN dates
ON dailycount.transactionDate = dates.tranDate;

END
``````
0

LVL 8

Expert Comment

ID: 34127221
Sorry, remove

Declare tranDate  Date;

because is not necessary for my solution

good luck
0

LVL 51

Expert Comment

ID: 34127314
Yep, kinda have to agree...

but would change it slightly...

``````select (sum(EmailTransCount)+ sum(posttranscount))  INTO totalCount
from dailycount
where countoftheday <>0
and transactiondate IN (select Transactiondate from dailycount where countoftheday <>0 order by transactiondate desc limit 2)
``````
0

LVL 8

Expert Comment

ID: 34127399
Hi mark_wills,

I'm not sure about repeating

where countoftheday <>0

If we retrieve the dates in my temp table or your subquery, would it be necessary doing it again in the main query?
I've seen the original code has it, but I've got my doubts.

Cheers
0

LVL 51

Expert Comment

ID: 34127472
Yep reckon it is... But like you I did have my doubts.

We dont know what may be included or excluded as a result of countoftheday, or, the dependancy on that condition.

Certainly if the goal is simply the two most recent dates (regardless) then it is not needed in the subquery (as it currently is).

But, if we take our clue from the original max(Transactiondate) then it was part of that condition, so, simply carried it through...
0

LVL 31

Expert Comment

ID: 34128000
See attached for alternate method.
procedure.txt
0

LVL 44

Expert Comment

ID: 34128766

SELECT Sum(EmailTransCount) + Sum(PostTransCount) FROM (
SELECT * FROM DailyCount ORDER BY TransactionDate DESC LIMIT 2)
0

LVL 51

Assisted Solution

Mark Wills earned 250 total points
ID: 34129209
Hmmmm...

I was assuming there could be multiple instances of transactiondate within the DailyCount datasource. So, getting the top 2 rows doesnt necessarily return the top 2 distinct transactiondates. Then I realised there was an error in my previous query where we have to group by (or distinct) in order to ensure we get the top 2 distinct transactiondates.

ie:

``````select (sum(EmailTransCount)+ sum(posttranscount))  INTO totalCount
from dailycount
where countoftheday <>0
and transactiondate IN (select Transactiondate from dailycount where countoftheday <>0 group by transactionDate order by transactiondate desc limit 2)
``````
0

LVL 44

Expert Comment

ID: 34129413
Do we need the top two 'different' dates?  What do we do when there are five (to choose a number) records having the same date which are max() dates.
0

LVL 51

Expert Comment

ID: 34129766
@grayl, I think that is where the SUM comes into it...

If possible, would be great to see some sample data and expected results
0

Author Closing Comment

ID: 34193679
Many Thanks for your replies.

I am sorry for late response. I was out of station last week.
0

Join & Write a Comment Already a member? Login.

Suggested Solutions

Introduction Hopefully the following mnemonic and, ultimately, the acronym it represents is common place to all those reading: Please Excuse My Dear Aunt Sally (PEMDAS). Briefly, though, PEMDAS is used to signify the order of operations (http://en.…
If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!