HRHISTORY table compare date rows

 2 Replies
 0 Subscribed to this topic
 22 Subscribed to this forum
Sort:
Author
Messages
Sarah
Advanced Member
Posts: 33
Advanced Member
    How do I use the HRHISTORY table to look at the most recent (fld nbr 51)ADJ_HIRE_DT - (fld nbr 27)LAST TERM DT and if it's less than 365 days take the (fld nbr 26)PREVIOUS SENIORITY DT and add those days to the PREV SENIORITY DT to identify what the employees TRUE SENIORITY DT should be.

    Example: Employee is rehired with an adj_hire_dt = 02/19/2012. Their previous term date = 02/22/2011 so
    02/19/2012-02/22/2011=362 days
    Their previous seniority date = 03/09/2001+362=03/06/2002.

    I've been able to export this information into excel and manipulate it that way so I can audit who needs to have their seniority date fixed but I'd like to create a report that anyone can run on the Lawson Dashboard.

    Any ideas?

    TIA,

    Sarah
    S Eckerson
    Basic Member
    Posts: 7
    Basic Member
      Hi Sarah,

      If you are on Oracle (It appears that SQL Server 2012 has these functions), you can use the LAG/LEAD function to find previous or next values from HRHISTORY. It is a bit tedious to get all of the data you might want from HRHISTORY, but it's fun to tease out just the stuff you're looking for.

      Here are some example of SQL code using the LAG/LEAD functions. This is looking at field 20 (employee status) but change the fld_nbr and it will work for any type change.

      select
      hrhistory.company
      ,hrhistory.employee
      ,hrhistory.seq_nbr
      ,hrhistory.beg_date
      ,hrhistory.a_value
      ,hrhistory.act_obj_id
      --next line will get the max act_obj_id for those employees who have more than one change on one day
      ,max(act_obj_id)over(partition by hrhistory.employee,hrhistory.beg_date) max_record
      --next line gives you a total count of changes by employee
      ,count (*) over( partition by hrhistory.employee order by hrhistory.employee) total
      --next line returns previous value
      ,lag(hrhistory.a_value,1) over( partition by hrhistory.employee order by hrhistory.act_obj_id, seq_nbr)previousvalue
      --next line returns beg_date of previous value
      ,lag(hrhistory.beg_date,1)over( partition by hrhistory.employee order by hrhistory.act_obj_id, seq_nbr)prevaldate
      from lawprod.hrhistory
      where
      hrhistory.fld_nbr = 20
      and hrhistory.date_stamp >= '01-JAN-12'
      and hrhistory.date_stamp <= '01-FEB-12'

      Enjoy!
      Sarah
      Advanced Member
      Posts: 33
      Advanced Member
        Interesting. Let me play around with this SQL and see if I can get it to work.

        Thank you!