SQL查询仅删除列中相邻行值为零且“日期”列具有90天差异的行

时间:2015-11-05 08:25:43

标签: sql sql-server

输入 -

Posting Date    Amount in doc. curr.
2/28/2015        -679,407.79
3/17/2015         679,407.79
7/31/2014        -644,521.00
8/18/2015         644,521.00
8/30/2015        -153,144.88

输出 -

Posting Date Amount in doc. curr.
7/31/2014      -644,521.00
8/18/2015       644,521.00
8/30/2015      -153,144.88

在此示例中,虽然-644,521.00和644,521.00总和为零,但过帐日期(8/18 / 2015,7 / 31/2014)的差异超过90天,因此不应删除这些行。 -153,144.88是没有+ ve匹配的个人金额,所以这一行也不会被删除。

1 个答案:

答案 0 :(得分:0)

试试这个

SELECT *
INTO   #test
FROM   (VALUES (Cast('2/28/2015' AS DATE),-679407.79),
               (Cast('3/17/2015' AS DATE),679407.79),
               (Cast('7/31/2014' AS DATE),-644521.00),
               (Cast('8/18/2015' AS DATE),644521.00),
               (Cast('8/30/2015' AS DATE),-153144.88) ) cs (p_date, amount);

WITH cte
     AS (SELECT Max(p_date)OVER(partition BY Abs(amount)) mx_date,
                Min(p_date)OVER(partition BY Abs(amount)) mn_date,
                Sum(amount)OVER(partition BY Abs(amount)) AS s_amt,
                *
         FROM   #test)
DELETE FROM cte
WHERE  Datediff(dd, mn_date, mx_date) < 90
       AND s_amt = 0