/***************************************
2012 - Aggregate with order
****************************************/
;with CTEOrders as
(select cast(1 as int) as OrderID, cast('3/1/2012' as date) as OrderDate, cast(10.00 as money) as OrderAmt, 'Joe' as CustomerName
union select 2, '3/1/2012', 11.00, 'Sam'
union select 3, '3/2/2012', 10.00, 'Beth'
union select 4, '3/2/2012', 15.00, 'Joe'
union select 5, '3/2/2012', 17.00, 'Sam'
union select 6, '3/3/2012', 12.00, 'Joe'
union select 7, '3/4/2012', 10.00, 'Beth'
union select 8, '3/4/2012', 18.00, 'Sam'
union select 9, '3/4/2012', 12.00, 'Joe'
union select 10, '3/4/2012', 11.00, 'Beth'
union select 11, '3/5/2012', 14.00, 'Sam'
union select 12, '3/6/2012', 17.00, 'Beth'
union select 13, '3/6/2012', 19.00, 'Joe'
union select 14, '3/7/2012', 13.00, 'Beth'
union select 15, '3/7/2012', 16.00, 'Sam'
)
select OrderID
,OrderDate
,OrderAmt
,CustomerName
,SUM(OrderAmt) OVER (PARTITION BY datepart(yyyy, OrderDate) ORDER BY OrderDate) as AnnualRunning -- accumulate by day within year
,SUM(OrderAmt) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID) as RunningByCustomer -- accumulate by date then orderID within customer
from CTEOrders
--ORDER BY CustomerName
ORDER BY OrderDate
;
/*
OrderID OrderDate OrderAmt CustomerName AnnualRunning RunningByCustomer
1 2012-03-01 10.0000 Joe 21.0000 10.0000
2 2012-03-01 11.0000 Sam 21.0000 11.0000
5 2012-03-02 17.0000 Sam 63.0000 28.0000
4 2012-03-02 15.0000 Joe 63.0000 25.0000
3 2012-03-02 10.0000 Beth 63.0000 10.0000
6 2012-03-03 12.0000 Joe 75.0000 37.0000
9 2012-03-04 12.0000 Joe 126.0000 49.0000
7 2012-03-04 10.0000 Beth 126.0000 20.0000
10 2012-03-04 11.0000 Beth 126.0000 31.0000
8 2012-03-04 18.0000 Sam 126.0000 46.0000
11 2012-03-05 14.0000 Sam 140.0000 60.0000
12 2012-03-06 17.0000 Beth 176.0000 48.0000
13 2012-03-06 19.0000 Joe 176.0000 68.0000
14 2012-03-07 13.0000 Beth 205.0000 61.0000
15 2012-03-07 16.0000 Sam 205.0000 76.0000
*/
/*****************************************
2012 Aggregate with ROWS
*****************************************/
with CTEOrders as
(select cast(1 as int) as OrderID, cast('3/1/2012' as date) as OrderDate, cast(10.00 as money) as OrderAmt, 'Joe' as CustomerName
union select 2, '3/1/2012', 11.00, 'Sam'
union select 3, '3/2/2012', 10.00, 'Beth'
union select 4, '3/2/2012', 15.00, 'Joe'
union select 5, '3/2/2012', 17.00, 'Sam'
union select 6, '3/3/2012', 12.00, 'Joe'
union select 7, '3/4/2012', 10.00, 'Beth'
union select 8, '3/4/2012', 18.00, 'Sam'
union select 9, '3/4/2012', 12.00, 'Joe'
union select 10, '3/4/2012', 11.00, 'Beth'
union select 11, '3/5/2012', 14.00, 'Sam'
union select 12, '3/6/2012', 17.00, 'Beth'
union select 13, '3/6/2012', 19.00, 'Joe'
union select 14, '3/7/2012', 13.00, 'Beth'
union select 15, '3/7/2012', 16.00, 'Sam'
)
select OrderID
,OrderDate
,OrderAmt
,CustomerName
,SUM(OrderAmt) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID ROWS 1 PRECEDING) as LastTwoAmts
,SUM(OrderAmt) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) as NextTwoAmts
,SUM(OrderAmt) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) as CurrAndNextTwoAmts
from CTEOrders
order by CustomerName, OrderDate, OrderID
;
/*
OrderID OrderDate OrderAmt CustomerName LastTwoAmts NextTwoAmts CurrAndNextTwoAmts
3 2012-03-02 10.0000 Beth 10.0000 21.0000 31.0000
7 2012-03-04 10.0000 Beth 20.0000 28.0000 38.0000
10 2012-03-04 11.0000 Beth 21.0000 30.0000 41.0000
12 2012-03-06 17.0000 Beth 28.0000 13.0000 30.0000
14 2012-03-07 13.0000 Beth 30.0000 NULL 13.0000
1 2012-03-01 10.0000 Joe 10.0000 27.0000 37.0000
4 2012-03-02 15.0000 Joe 25.0000 24.0000 39.0000
6 2012-03-03 12.0000 Joe 27.0000 31.0000 43.0000
9 2012-03-04 12.0000 Joe 24.0000 19.0000 31.0000
13 2012-03-06 19.0000 Joe 31.0000 NULL 19.0000
2 2012-03-01 11.0000 Sam 11.0000 35.0000 46.0000
5 2012-03-02 17.0000 Sam 28.0000 32.0000 49.0000
8 2012-03-04 18.0000 Sam 35.0000 30.0000 48.0000
11 2012-03-05 14.0000 Sam 32.0000 16.0000 30.0000
15 2012-03-07 16.0000 Sam 30.0000 NULL 16.0000
*/
/*****************************************
2012 Aggregate with RANGE
*****************************************/
with CTEOrders as
(select cast(1 as int) as OrderID, cast('3/1/2012' as date) as OrderDate, cast(10.00 as money) as OrderAmt, 'Joe' as CustomerName
union select 2, '3/1/2012', 11.00, 'Sam'
union select 3, '3/2/2012', 10.00, 'Beth'
union select 4, '3/2/2012', 15.00, 'Joe'
union select 5, '3/2/2012', 17.00, 'Sam'
union select 6, '3/3/2012', 12.00, 'Joe'
union select 7, '3/4/2012', 10.00, 'Beth'
union select 8, '3/4/2012', 18.00, 'Sam'
union select 9, '3/4/2012', 12.00, 'Joe'
union select 10, '3/4/2012', 11.00, 'Beth'
union select 11, '3/5/2012', 14.00, 'Sam'
union select 12, '3/6/2012', 17.00, 'Beth'
union select 13, '3/6/2012', 19.00, 'Joe'
union select 14, '3/7/2012', 13.00, 'Beth'
union select 15, '3/7/2012', 16.00, 'Sam'
)
select OrderID
,OrderDate
,OrderAmt
,CustomerName
,SUM(OrderAmt) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID RANGE BETWEEN UNBOUNDED PRECEDING and CURRENT ROW) as RunningTotalAmt
from CTEOrders
order by CustomerName, OrderDate, OrderID
;
/*
OrderID OrderDate OrderAmt CustomerName RunningTotalAmt
3 2012-03-02 10.0000 Beth 10.0000
7 2012-03-04 10.0000 Beth 20.0000
10 2012-03-04 11.0000 Beth 31.0000
12 2012-03-06 17.0000 Beth 48.0000
14 2012-03-07 13.0000 Beth 61.0000
1 2012-03-01 10.0000 Joe 10.0000
4 2012-03-02 15.0000 Joe 25.0000
6 2012-03-03 12.0000 Joe 37.0000
9 2012-03-04 12.0000 Joe 49.0000
13 2012-03-06 19.0000 Joe 68.0000
2 2012-03-01 11.0000 Sam 11.0000
5 2012-03-02 17.0000 Sam 28.0000
8 2012-03-04 18.0000 Sam 46.0000
11 2012-03-05 14.0000 Sam 60.0000
15 2012-03-07 16.0000 Sam 76.0000
*/
/*****************************************
2012 Aggregate with CURRENT ROW
RANGE with Only CURRENT ROW specified - aggregates
based on PARTITION and ORDER BY clauses
ROWS with Only CURRENT ROW specified - aggregates
the current row only (or no aggregation)
*****************************************/
with CTEOrders as
(select cast(1 as int) as OrderID, cast('3/1/2012' as date) as OrderDate, cast(10.00 as money) as OrderAmt, 'Joe' as CustomerName
union select 2, '3/1/2012', 11.00, 'Sam'
union select 3, '3/2/2012', 10.00, 'Beth'
union select 4, '3/2/2012', 15.00, 'Joe'
union select 5, '3/2/2012', 17.00, 'Sam'
union select 6, '3/3/2012', 12.00, 'Joe'
union select 7, '3/4/2012', 10.00, 'Beth'
union select 8, '3/4/2012', 18.00, 'Sam'
union select 9, '3/4/2012', 12.00, 'Joe'
union select 10, '3/4/2012', 11.00, 'Beth'
union select 11, '3/5/2012', 14.00, 'Sam'
union select 12, '3/6/2012', 17.00, 'Beth'
union select 13, '3/6/2012', 19.00, 'Joe'
union select 14, '3/7/2012', 13.00, 'Beth'
union select 15, '3/7/2012', 16.00, 'Sam'
)
select OrderID
,OrderDate
,OrderAmt
,CustomerName
,SUM(OrderAmt) OVER (PARTITION BY CustomerName ORDER BY OrderDate RANGE CURRENT ROW) as RunningTotalAmtRange
,SUM(OrderAmt) OVER (PARTITION BY CustomerName ORDER BY OrderDate ROWS CURRENT ROW) as RunningTotalAmtRow
from CTEOrders
order by CustomerName, OrderDate, OrderID
;
/*
OrderID OrderDate OrderAmt CustomerName RunningTotalAmtRange RunningTotalAmtRow
3 2012-03-02 10.0000 Beth 10.0000 10.0000
7 2012-03-04 10.0000 Beth 21.0000 10.0000
10 2012-03-04 11.0000 Beth 21.0000 11.0000
12 2012-03-06 17.0000 Beth 17.0000 17.0000
14 2012-03-07 13.0000 Beth 13.0000 13.0000
1 2012-03-01 10.0000 Joe 10.0000 10.0000
4 2012-03-02 15.0000 Joe 15.0000 15.0000
6 2012-03-03 12.0000 Joe 12.0000 12.0000
9 2012-03-04 12.0000 Joe 12.0000 12.0000
13 2012-03-06 19.0000 Joe 19.0000 19.0000
2 2012-03-01 11.0000 Sam 11.0000 11.0000
5 2012-03-02 17.0000 Sam 17.0000 17.0000
8 2012-03-04 18.0000 Sam 18.0000 18.0000
11 2012-03-05 14.0000 Sam 14.0000 14.0000
15 2012-03-07 16.0000 Sam 16.0000 16.0000
*/
/*****************************************
2012 Analytic functions
*****************************************/
with CTEOrders as
(select cast(1 as int) as OrderID, cast('3/1/2012' as date) as OrderDate, cast(10.00 as money) as OrderAmt, 'Joe' as CustomerName
union select 2, '3/1/2012', 11.00, 'Sam'
union select 3, '3/2/2012', 10.00, 'Beth'
union select 4, '3/2/2012', 15.00, 'Joe'
union select 5, '3/2/2012', 17.00, 'Sam'
union select 6, '3/3/2012', 12.00, 'Joe'
union select 7, '3/4/2012', 10.00, 'Beth'
union select 8, '3/4/2012', 18.00, 'Sam'
union select 9, '3/4/2012', 12.00, 'Joe'
union select 10, '3/4/2012', 11.00, 'Beth'
union select 11, '3/5/2012', 14.00, 'Sam'
union select 12, '3/6/2012', 17.00, 'Beth'
union select 13, '3/6/2012', 19.00, 'Joe'
union select 14, '3/7/2012', 13.00, 'Beth'
union select 15, '3/7/2012', 16.00, 'Sam'
)
select OrderID
,OrderDate
,OrderAmt
,CustomerName
,LAG(OrderAmt) OVER (ORDER BY OrderDate, OrderID) as PrevOrderAmt
,LEAD(OrderAmt) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID) as NextAmtForCustomer
,LAG(OrderID, 2) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID) as TwoOrdersAgoID
,LAG(OrderAmt,1, 0) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID) as PrevOrderAmtDef0
,LAG(OrderDate, 2, '9999-12-31') OVER (PARTITION BY CustomerName ORDER BY OrderID) as NextTwoOrdDtNoNull
,FIRST_VALUE(OrderDate) OVER (ORDER BY OrderID) as FirstOrdDt
,LAST_VALUE(CustomerName) OVER (PARTITION BY OrderDate ORDER BY OrderID) as LastCustToOrdByDay
,LAG(OrderAmt,(select count(*)-1 from CTEOrders c where c.CustomerName = CTEOrders.CustomerName) , 0) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID) as FirstOrderAmt -- works on last row only here
from CTEOrders
order by CustomerName, OrderDate, OrderID;
/*
OrderID OrderDate OrderAmt CustomerName PrevOrderAmt NextAmtForCustomer TwoOrdersAgoID PrevOrderAmtDef0 NextTwoOrdDtNoNull FirstOrdDt LastCustToOrdByDay FirstOrderAmt
3 2012-03-02 10.0000 Beth 11.0000 10.0000 NULL 0.0000 9999-12-31 2012-03-01 Beth 0.0000
7 2012-03-04 10.0000 Beth 12.0000 11.0000 NULL 10.0000 9999-12-31 2012-03-01 Beth 0.0000
10 2012-03-04 11.0000 Beth 12.0000 17.0000 3 10.0000 2012-03-02 2012-03-01 Beth 0.0000
12 2012-03-06 17.0000 Beth 14.0000 13.0000 7 11.0000 2012-03-04 2012-03-01 Beth 0.0000
14 2012-03-07 13.0000 Beth 19.0000 NULL 10 17.0000 2012-03-04 2012-03-01 Beth 10.0000
1 2012-03-01 10.0000 Joe NULL 15.0000 NULL 0.0000 9999-12-31 2012-03-01 Joe 0.0000
4 2012-03-02 15.0000 Joe 10.0000 12.0000 NULL 10.0000 9999-12-31 2012-03-01 Joe 0.0000
6 2012-03-03 12.0000 Joe 17.0000 12.0000 1 15.0000 2012-03-01 2012-03-01 Joe 0.0000
9 2012-03-04 12.0000 Joe 18.0000 19.0000 4 12.0000 2012-03-02 2012-03-01 Joe 0.0000
13 2012-03-06 19.0000 Joe 17.0000 NULL 6 12.0000 2012-03-03 2012-03-01 Joe 10.0000
2 2012-03-01 11.0000 Sam 10.0000 17.0000 NULL 0.0000 9999-12-31 2012-03-01 Sam 0.0000
5 2012-03-02 17.0000 Sam 15.0000 18.0000 NULL 11.0000 9999-12-31 2012-03-01 Sam 0.0000
8 2012-03-04 18.0000 Sam 10.0000 14.0000 2 17.0000 2012-03-01 2012-03-01 Sam 0.0000
11 2012-03-05 14.0000 Sam 11.0000 16.0000 5 18.0000 2012-03-02 2012-03-01 Sam 0.0000
15 2012-03-07 16.0000 Sam 13.0000 NULL 8 14.0000 2012-03-04 2012-03-01 Sam 11.0000
*/
with CTEOrders as
(select cast(1 as int) as OrderID, cast('3/1/2012' as date) as OrderDate, cast(10.00 as money) as OrderAmt, 'Joe' as CustomerName
union select 2, '3/1/2012', 11.00, 'Sam'
union select 3, '3/2/2012', 10.00, 'Beth'
union select 4, '3/2/2012', 15.00, 'Joe'
union select 5, '3/2/2012', 17.00, 'Sam'
union select 6, '3/3/2012', 12.00, 'Joe'
union select 7, '3/4/2012', 10.00, 'Beth'
union select 8, '3/4/2012', 18.00, 'Sam'
union select 9, '3/4/2012', 12.00, 'Joe'
union select 10, '3/4/2012', 11.00, 'Beth'
union select 11, '3/5/2012', 14.00, 'Sam'
union select 12, '3/6/2012', 17.00, 'Beth'
union select 13, '3/6/2012', 19.00, 'Joe'
union select 14, '3/7/2012', 13.00, 'Beth'
union select 15, '3/7/2012', 16.00, 'Sam'
)
, CTEOrderAnalytics as (
select OrderID
,OrderDate
,OrderAmt
,CustomerName
,COUNT(*) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID) as RunningCount
,LAG(OrderAmt,(select count(*)-1 from CTEOrders c where c.CustomerName = CTEOrders.CustomerName) , 0) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID) as FirstOrderAmt -- works on last row only here
from CTEOrders
)
select *
,LAG(OrderAmt,(select RunningCount-1 from CTEOrderAnalytics c where c.CustomerName = CTEOrderAnalytics.CustomerName
and c.OrderID = CTEOrderAnalytics.OrderID) , 0) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID) as FirstOrderAmt -- works on last row only here
,FIRST_VALUE(OrderAmt) OVER (PARTITION BY CustomerName ORDER BY OrderDate, OrderID) as FirstOrderAmtEasy
from CTEOrderAnalytics;
/*
OrderID OrderDate OrderAmt CustomerName RunningCount FirstOrderAmt FirstOrderAmt FirstOrderAmtEasy
3 2012-03-02 10.0000 Beth 1 0.0000 10.0000 10.0000
7 2012-03-04 10.0000 Beth 2 0.0000 10.0000 10.0000
10 2012-03-04 11.0000 Beth 3 0.0000 10.0000 10.0000
12 2012-03-06 17.0000 Beth 4 0.0000 10.0000 10.0000
14 2012-03-07 13.0000 Beth 5 10.0000 10.0000 10.0000
1 2012-03-01 10.0000 Joe 1 0.0000 10.0000 10.0000
4 2012-03-02 15.0000 Joe 2 0.0000 10.0000 10.0000
6 2012-03-03 12.0000 Joe 3 0.0000 10.0000 10.0000
9 2012-03-04 12.0000 Joe 4 0.0000 10.0000 10.0000
13 2012-03-06 19.0000 Joe 5 10.0000 10.0000 10.0000
2 2012-03-01 11.0000 Sam 1 0.0000 11.0000 11.0000
5 2012-03-02 17.0000 Sam 2 0.0000 11.0000 11.0000
8 2012-03-04 18.0000 Sam 3 0.0000 11.0000 11.0000
11 2012-03-05 14.0000 Sam 4 0.0000 11.0000 11.0000
15 2012-03-07 16.0000 Sam 5 11.0000 11.0000 11.0000
*/
/******************************
CUME_DIST and PCT_RANK
******************************/
with CTEOrders as
(select cast(1 as int) as OrderID, cast('3/1/2012' as date) as OrderDate, cast(10.00 as money) as OrderAmt, 'Joe' as CustomerName
union select 2, '3/1/2012', 11.00, 'Sam'
union select 3, '3/2/2012', 10.00, 'Beth'
union select 4, '3/2/2012', 15.00, 'Joe'
union select 5, '3/2/2012', 17.00, 'Sam'
union select 6, '3/3/2012', 12.00, 'Joe'
union select 7, '3/4/2012', 10.00, 'Beth'
union select 8, '3/4/2012', 18.00, 'Sam'
union select 9, '3/4/2012', 12.00, 'Joe'
union select 10, '3/4/2012', 11.00, 'Beth'
union select 11, '3/5/2012', 14.00, 'Sam'
union select 12, '3/6/2012', 17.00, 'Beth'
union select 13, '3/6/2012', 19.00, 'Joe'
union select 14, '3/7/2012', 13.00, 'Beth'
union select 15, '3/7/2012', 16.00, 'Sam'
)
select OrderID
,OrderDate
,OrderAmt
,CustomerName
,CUME_DIST() OVER (ORDER BY OrderAmt) CumDist
,PERCENT_RANK() OVER (ORDER BY OrderAmt) PctRank
from CTEOrders
/*
1 2012-03-01 10.0000 Joe 0.2 0
3 2012-03-02 10.0000 Beth 0.2 0
7 2012-03-04 10.0000 Beth 0.2 0
2 2012-03-01 11.0000 Sam 0.333333333333333 0.214285714285714
10 2012-03-04 11.0000 Beth 0.333333333333333 0.214285714285714
6 2012-03-03 12.0000 Joe 0.466666666666667 0.357142857142857
9 2012-03-04 12.0000 Joe 0.466666666666667 0.357142857142857
14 2012-03-07 13.0000 Beth 0.533333333333333 0.5
11 2012-03-05 14.0000 Sam 0.6 0.571428571428571
4 2012-03-02 15.0000 Joe 0.666666666666667 0.642857142857143
15 2012-03-07 16.0000 Sam 0.733333333333333 0.714285714285714
5 2012-03-02 17.0000 Sam 0.866666666666667 0.785714285714286
12 2012-03-06 17.0000 Beth 0.866666666666667 0.785714285714286
8 2012-03-04 18.0000 Sam 0.933333333333333 0.928571428571429
13 2012-03-06 19.0000 Joe 1 1
*/
/******************************
PERCENTILE_CONT and PERCENTILE_DISC
******************************/
with CTEOrders as
(select cast(1 as int) as OrderID, cast('3/1/2012' as date) as OrderDate, cast(10.00 as money) as OrderAmt, 'Joe' as CustomerName
union select 2, '3/1/2012', 11.00, 'Sam'
union select 3, '3/2/2012', 10.00, 'Beth'
union select 4, '3/2/2012', 15.00, 'Joe'
union select 5, '3/2/2012', 17.00, 'Sam'
union select 6, '3/3/2012', 12.00, 'Joe'
union select 7, '3/4/2012', 10.00, 'Beth'
union select 8, '3/4/2012', 18.00, 'Sam'
union select 9, '3/4/2012', 12.00, 'Joe'
union select 10, '3/4/2012', 11.00, 'Beth'
union select 11, '3/5/2012', 14.00, 'Sam'
union select 12, '3/6/2012', 17.00, 'Beth'
union select 13, '3/6/2012', 19.00, 'Joe'
union select 14, '3/7/2012', 13.00, 'Beth'
union select 15, '3/7/2012', 16.00, 'Sam'
)
select OrderID as ID
,OrderDate as ODt
,OrderAmt as OAmt
,CustomerName as CName
,PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY OrderAmt) OVER () PerCont05
,PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY OrderAmt) OVER () PerDisc05
,PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY OrderAmt) OVER (PARTITION BY OrderDate) PerContDt
,PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY OrderAmt) OVER (PARTITION BY OrderDate) PerDiscDt
,PERCENTILE_CONT(0) WITHIN GROUP (ORDER BY OrderAmt) OVER() PerCont0
from CTEOrders;
/*
ID ODt OAmt CName PerCont05 PerDisc05 PerContDt PerDiscDt PerCont0
1 2012-03-01 10.0000 Joe 13 13.0000 10.5 10.0000 10
2 2012-03-01 11.0000 Sam 13 13.0000 10.5 10.0000 10
3 2012-03-02 10.0000 Beth 13 13.0000 15 15.0000 10
4 2012-03-02 15.0000 Joe 13 13.0000 15 15.0000 10
5 2012-03-02 17.0000 Sam 13 13.0000 15 15.0000 10
6 2012-03-03 12.0000 Joe 13 13.0000 12 12.0000 10
7 2012-03-04 10.0000 Beth 13 13.0000 11.5 11.0000 10
10 2012-03-04 11.0000 Beth 13 13.0000 11.5 11.0000 10
9 2012-03-04 12.0000 Joe 13 13.0000 11.5 11.0000 10
8 2012-03-04 18.0000 Sam 13 13.0000 11.5 11.0000 10
11 2012-03-05 14.0000 Sam 13 13.0000 14 14.0000 10
12 2012-03-06 17.0000 Beth 13 13.0000 18 17.0000 10
13 2012-03-06 19.0000 Joe 13 13.0000 18 17.0000 10
14 2012-03-07 13.0000 Beth 13 13.0000 14.5 13.0000 10
15 2012-03-07 16.0000 Sam 13 13.0000 14.5 13.0000 10
*/