Print Page | Close Window

Maximum Date for Unique Record

Printed From: Crystal Reports Book
Category: Crystal Reports 9 through 2020
Forum Name: Report Design
Forum Discription: The best way to design a report and problems you have encountered
URL: http://www.crystalreportsbook.com/forum/forum_posts.asp?TID=22202
Printed Date: 06 May 2024 at 1:24am


Topic: Maximum Date for Unique Record
Posted By: scsh4
Subject: Maximum Date for Unique Record
Date Posted: 23 Jan 2017 at 8:33am
Good Afternoon!

How would I write a statement to only return the record with the maximum EFFECTIVE_DATE, including records for all unique EID. I have thousands of records, below are just a few examples. Each EID could have anywhere from 5 to 50+ records, but I need to return a record for each EID, only the record with the maximum EFFECTIVE_DATE and excluding duplicates (as found in EID 125 and 152).

(Example of returned results)
EID     FIRST_NAME     LAST_NAME     HOURLY_BASE     EFFECTIVE_DATE
125     John                    Doe               18.25          01/01/2017
125     John                    Doe               18.25          01/01/2017
125     John                    Doe               16.25          01/01/2016
125     John                    Doe               14.25          01/01/2015
130     Bill                    Edwards               20.50          01/23/2017
130     Bill                    Edwards               19.75          06/01/2016
130     Bill                    Edwards               19.00          01/01/2016
130     Bill                    Edwards               17.00          08/25/2015
152     Scott                    Smith               32.50          01/01/2017
152     Scott                    Smith               32.50          01/01/2017
152     Scott                    Smith               30.00          01/01/2016
152     Scott                    Smith               26.00          06/01/2015

(Example of what I need returned)
EID     FIRST_NAME     LAST_NAME     HOURLY_BASE     EFFECTIVE_DATE
125     John               Doe               18.25          01/01/2017
130     Bill                 Edwards               20.50          01/23/2017
152     Scott               Smith               32.50          01/01/2017

Thanks in advance for any advice that is given!



Replies:
Posted By: hilfy
Date Posted: 23 Jan 2017 at 9:57am
There are two ways you can do this:

Easy way using just Crystal, but pulling way too much data, slowing down the report: (assumes that you want the data in EID order...)

1. Group by EID.
2. Sort by Effective_date descending.
3. Put all of the data in the EID group header section.
4. Suppress the details and EID group footer.

More difficult way that gets only the data you're looking for:

Write a command (SQL Select statement) to get the data instead of using tables in Crystal.

It might look something like this:

Select
a.EID, a.FIRST_NAME, a.LAST_NAME, b.HOURLY_BASE, b.EFFECTIVE_DATE
from Employee a
inner join Salary b
    on a.EID = b.EID
where b.EFFECTIVE_DATE =
(Select max(EFFECTIVE_DATE)
    from Salary b2
    where b2.EID = a.EID)

For more information about how to use Commands, see my blog post here:
http://blogs.sap.com/2015/04/01/best-practices-when-using-commands-with-crystal-reports/

-Dell

-------------
Proviti, Data & Analytics Practice
http://www.protiviti.com/US-en/data-management-advanced-analytics - www.protiviti.com/US-en/data-management-advanced-analytics


Posted By: scsh4
Date Posted: 23 Jan 2017 at 10:39am
Hilfy,

I appreciate the response. Those being hypothetical fields, if I gave you the actual field names, could you outline an actual select statement for me?

The field names are as follows, if you're able:
TWAGE.EMPLOYEE_NO
TEMPLOYEE.FIRST_NAME
TEMPLOYEE.LAST_NAME
TWAGE.HOURLY_BASE_PAY
TWAGE.EFFECTIVE_DATE

Tables TWAGE and TEMPLOYEE and joined by EMPLOYEE_NO. I'm just not confident on my abilities to select by SQL command through CR. Also, would I put this select statement into the "Record Selection" window in the Formula Workshop? I really appreciate your help and thank you for what you've provided me so far!


Posted By: hilfy
Date Posted: 23 Jan 2017 at 11:48am
The Select statement would be in a "Command" in the Database Expert. It would completely replace ALL of the tables that you have in the report. See the link I provided above for information details on the best way to work with commands, but the two major rules are:

1. The command should pull ALL of the data you need for your report - DO NOT join it to tables or other commands.

2. Put ALL of the filter criteria in the Where clause of the command - DO NOT use the Select Expert to filter data.

Here's what your command would look like:

Select
e.EMPLOYEE_NO,
e.FIRST_NAME,
e.LAST_NAME,
w.HOURLY_BASE_PAY,
w.EFFECTIVE_DATE
from TEMPLOYEE e
inner join TWAGE w
    on e.EMPLOYEE_NO = w.EMPLOYEE_NO
inner join (
      Select EMPLOYEE_NO, max(EFFECTIVE_DATE) as maxDate
      from TWAGE
      group by EMPLOYEE_NO
    ) as mostRecent
    on w.EMPLOYEE_NO = mostRecent.EMPLOYEE_NO
      and w.EFFECTIVE_DATE = mostRecent.maxDate
Where
<whatever filter you need for your report...>

I did make a change from what I originally posted in that I took the date filter out of the Where clause and set it up for a join instead because that will be more efficient when it runs.

-Dell

-------------
Proviti, Data & Analytics Practice
http://www.protiviti.com/US-en/data-management-advanced-analytics - www.protiviti.com/US-en/data-management-advanced-analytics



Print Page | Close Window