I have data like shown below.
ID Date 8215 3/11/2013 8215 3/11/2011 8215 3/12/2009 8215 3/10/2007 18150 3/1/2013 18150 3/4/2011 18150 3/4/2009 18150 3/1/2008 18150 3/6/2006
ID Num_days 8215 731 18150 641
I would like to get the number of days for the last two dates for entity with ID 8215. In this example the number of days would 731 and 641 for ID 18150. It’s hard to get the number of dates for the last two dates when I have over 70k entities. How can I do this so I can calculate the average later on?
If you start with a list of unique IDs in column D, this should work. No sorting required:
It will be faster if you limit the ranges
Edit: I interpreted “last two dates” to mean “most recent two dates”. Another interpretation might be “most recent two entries in an ordered descending list”. In the latter interpretation use this instead:
I’m not sure I understand your requirement, but would something like:
copied down to suit serve?
Assuming ID is in column A, and dates are in column B, you would create column C, such that row 2 would read:
=(A2=A1) * (A2<>A3) * (B2-B1)
The first part (A2=A1) returns 1 if the ID is the same as the previous row, or 0 otherwise. The next part returns 1 if the ID is not the the same as the next row (so so far you have 1 if you’re in the last row of the ID, 0 otherwise), and the last part (B2-B1) gets the number of days between the two dates. This will return 0 or the number of days
This works even without sorting. It’s an array formula that gets the two largest dates based on condition and calculates the difference.
This is an array formula so use Ctrl-Shift-Enter when inputting it.
It’s better if you have a unique list somewhere, change
8215 to refer to the range, and just drag down.
Hope this helps.