【发布时间】:2015-02-11 11:15:18
【问题描述】:
我正在寻找一种方法来获取一堆开始日期和结束日期(很多和很多日期)的中位数。但是,它将特定于各种“发票编号”。请参阅下面的示例数据。
invoice_no invoice start date invoice end date
4006 11/14/2001 12/15/2004
20071 11/29/2001 02/01/2003
19893 11/30/2001 12/02/2001
19894 11/30/2001 12/04/2001
004 10/22/2002 10/31/2002
求开始日期和结束日期之间的中位数。
中位数将是该特定 invoice_no 的开始日期和结束日期之间的任何值。但是,为了尽可能多地过滤数据。我意识到我也可以做 WHERE STATUS 'REJECTED' 并且它也应该有助于避免很多不必要的日期。另外,我只想在几个月之间过滤,所以我也添加了 BETWEEN DATETIME。
到目前为止的代码:
与
时间间隔
(
选择发票编号,
invoice_start_date、invoice_end_date、check_date、status_code、
cast(count(*) OVER (PARTITION BY invoice_no) as float) 总计,
row_number() OVER (PARTITION BY invoice_no ORDER BY invoice_start_date, invoice_end_date, check_date) AS rn
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)
)
SELECT *
FROM tmp
WHERE (total / 2.0 - 1) < rn and rn < (total / 2.0 + 1)
【问题讨论】:
标签: sql sql-server-2008 date median