Finding Median Between TWO Dates SQL Server 2008
I am looking of a way to take the MEDIAN of a bunch of start and end dates (LOTS AND LOTS of dates). However, it would be specific to various 'invoice numbers.' See sample data bel
Solution 1:
If you mean the set of start dates and end dates, then put them in one column:
WITH t AS (
SELECT invoice_no, invoice_start_date, invoice_end_date, check_date, status_code,
FROM INVOICE_HEADER INNER JOIN
INVOICE_HEADER_CUSTOM
ON INVOICE_HEADER.invoice_id = INVOICE_HEADER_CUSTOM.invoice_id
WHERE status_code <> 'REJECTED' AND
Check_Date BETWEEN CONVERT(DATETIME, '2014-12-01 00:00:00', 102) AND
CONVERT(DATETIME, '2014-12-31 00:00:00', 102)
),
t2 as (
select d, row_number() over (order by d) as seqnum,
count(*) over () as cnt
from (select invoice_start_date as d from t
union all
select invoice_end_date as d from t
) t
)
select dateadd(day, datediff(hour, min(d), max(d)) / 2.0, min(d))
from t2
where 2 * seqnum in (cnt, cnt + 1, cnt + 2);
Solution 2:
Ok... try something like the query on this page:
SELECT @Median = AVG(1.0 * val)
FROM
(
SELECT val,
c = COUNT(*) OVER (),
rn = ROW_NUMBER() OVER (ORDER BY val)
FROM dbo.EvenRows
) AS x
WHERE rn IN ((c + 1)/2, (c + 2)/2);
Post a Comment for "Finding Median Between TWO Dates SQL Server 2008"