We provide two approaches to producing output lists for results presentation of differing complexities, for both versions we create lists for both an announcer feed and final results presentation.
The first is a simple approach which creates a separate output list for each stage.
The second is an advanced approach which uses the Results Selector to create dynamic lists which can easily switch between the different stages. This approach uses some of the same structure as the simple output.
Simple - Separate Output Lists
Announcer List
This list is intended for an announcer to be able to provide live updates to spectators, a separate output list will be created for each stage following the same format.
To provide an overview of the stage, participants are sorted and grouped according to whether they have started, finished, or not yet started the stage, with participants currently on the stage (started) shown at the top, followed by those who have already finished and yet to start shown last.
The sorting first assigns a value based on the special results for the stage, returning 3 for started (and not finished), 2 for finished and 1 for not yet started. This uses a switch() statement looking at the values of the StageX_Time and StageX_Start values.
The same logic is then used to group participants, returning the corresponding label for each possible value.
Within each group participants are then sorted either by their stage finish or stage start times according to whether they have finished or not. These results store the time of day so the last to start or finish are shown at the top of the respective group.
A final sorting is applied using the StageStatus() User-Defined Function which was built to sort participants who have not yet started the stage.

The output then shows some fields specific to each individual stage. The first column first checks the StageStatus() for the corresponding stage and then either returns the value for ShowStatus() or the stage rank.
The speed should only be shown if the participant has completed the stage, this is checked by looking at whether the decimal value is greater than zero. Similarly, if the stage has been finished then the stage time is shown, otherwise the ElapsedTime() function is used to show the participants' current running time on that stage.
Stage Result List
This list groups participants by their category, sorting them by fastest to slowest. Speed, Time and Gap Time are the most important info to be displayed. Again, an example of the first 3 stages result lists is shown down below in the Presenter section.

Presenter
With the presenter tool, it is possible to show the live results of a specific stage, by loading the list for the announcer.
Playing with some CSS, you can add colors, format the list based on device width, add a background to make it look nicer and much more...

And for the LED Wall, it is possible to load a presenter with the final result of each stage at the end of DAY 1 and DAY 2, with the option to auto-scroll the list.

Advanced - Results Selector
Announcer List
The results selector allows you to define a list of results which can then be selected from a dropdown to show different data according to that result, additionally a second result can be referenced from that dropdown value. Read more about the Results Selector to understand the fields being used here.
The Selector Results can be set when any of the Results Selector fields are included in the Fields / Columns of the output list. Each stage time is included as a result, and the second result then looks at the start time for that stage as we will need to reference both in the output, a stage label is given for each result.

Similar to the simple output list we group and sort participants according to whether or not they have started the stage but this time we call the SelectorTimePositive field to check whether they have finished the stage and the stage time sorting then Selector2DecimalTIme to check whether they have started the stage and for the start time sorting.
Since we are now using the Selector we simply use AutoRank to show the participants' rank within that stage, with some additional calculations based on SelectorID it would be possible to show the corresponding stage rank or status but as this is an announcer list it is not critical.

For the Time field we now reference the corresponding Selector times for the stage time and stage start time.
The GapTimeTop function relies on a result ID and rank ID, this is why it was important to use the same IDs between our rankings and special results since this now allows us to use the SelectorID which will return the ID of the special result which is the same as the required Ranking ID.
Stage Result List
For the Selector Results we have the same Results selected, but do not need to use the Result 2 for this output list.
This output provides the same grouping, but rather than calling a fixed rank for sorting we use the Rank() function with the SelectorID since again the Rank ID is the same as the Result ID.

We again use AutoRank here for the ranking, and the time and GapTimeTop instead again reference SelectorTime and SelectorID for the corresponding values to insert.

For this we additionally apply a filter to only show participants who have finished the corresponding stage by using SelectorTimePositive.
