根据T-SQL中的日期范围运行记录总数

用户名

样本数据:

groupID CustomerID  CustomerAddr    work_date   work_order
CA123   ABC12345    123 MAIN ST     2/1/2012    WORKNEW
CA123   ABC12345    123 MAIN ST     10/9/2012   ZZZ888
CA123   ABC12345    123 MAIN ST     3/9/2013    ZZZ131
WA999   ZZZ99909    451 EAST ST     1/13/2013   SY1234
WA999   ZZZ99909    451 EAST ST     4/15/2013   WORKOTHER
WA999   ZZZ99909    451 EAST ST     5/17/2013   SY1244
WA999   ZZZ99909    451 EAST ST     12/8/2013   SY1334
CA123   ABD54321    522 AVE A       4/21/2013   WW9999

对于给定的样本数据,我需要计算在6、12和18个月的间隔内出现具有相同groupID和CustomerID的记录的次数。该计数应独立于具有相同groupID和customerID的其他记录。

输出应如下所示:

groupID CustomerID  work_date   six_month_count twelve_month_count  twenty_four_month_count
CA123   ABC12345    2/1/2012    0               1                   2
CA123   ABC12345    10/9/2012   1               1                   1
CA123   ABC12345    3/9/2013    0               0                   0
WA999   ZZZ99909    1/13/2013   2               3                   3               
WA999   ZZZ99909    4/15/2013   1               2                   2
WA999   ZZZ99909    5/17/2013   0               1                   1
WA999   ZZZ99909    12/8/2013   0               0                   0
CA123   ABD54321    4/21/2013   0               0                   0

我唯一想做的就是获取每行的当前记录和最大记录,但是我不知道如何计算给定范围的记录。

任何帮助,将不胜感激。

斯图尔特

您可以将表连接到自身,然后通过聚合计算出6,12和24列。我已将其用作Work_Order避免在自我联接过程中对记录与自身进行计数的关键。

WITH cteCountInRange
AS
(
    SELECT c1.CustomerID, 
           c1.GroupID, 
           c1.Work_Date as WorkDate1, 
           c2.Work_Date as WorkDate2, 
           CASE WHEN c2.Work_Date > c1.Work_Date AND c1.Work_Order <> c2.Work_Order 
                THEN 1 
                ELSE 0 
           END AS Eligible,
           DATEDIFF(M, c1.Work_Date, c2.Work_Date ) AS MonthsDiff
    FROM CustomerData c1 INNER JOIN CustomerData c2
        ON c1.CustomerID = c2.CustomerID AND c1.GroupID = c2.GroupID
)
SELECT cir.CustomerID, cir.GroupID, cir.WorkDate1, 
    SUM(CASE WHEN Eligible = 1 AND MonthsDiff <= 6 THEN 1 ELSE 0 END) AS SixMonthCount,
    SUM(CASE WHEN Eligible = 1 AND MonthsDiff <= 12 THEN 1 ELSE 0 END) AS TwelveMonthCount,
    SUM(CASE WHEN Eligible = 1 AND MonthsDiff <= 24 THEN 1 ELSE 0 END) AS TwentyFourMonthCount
FROM cteCountInRange cir
GROUP BY cir.CustomerID, cir.GroupID, cir.WorkDate1;

在这里摆弄

编辑
附加注释-之所以无法在CTE中过滤掉“不合格”行,是因为如果当前行之后没有其他匹配的行,则需要一行ZEROES。如果我们对它们进行了过滤,我们将需要另一个LEFT JOIN返回原始表以包含零行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Oracle SQL中根据重叠的日期范围连接客户端记录

来自分类Dev

根据日期范围查找记录

来自分类Dev

BIRT中根据日期统计sql记录

来自分类Dev

T-SQL 根据值组合范围

来自分类Dev

如何根据日期计算查询中的总数?

来自分类Dev

根据最近的日期在SQL Server中插入记录

来自分类Dev

根据T-SQL中多个相关记录的排序顺序对记录进行排名?

来自分类Dev

SQL根据另一个表中的日期范围查找日期在表中的位置

来自分类Dev

根据答案计算记录总数

来自分类Dev

根据日期 SQL 删除旧记录

来自分类Dev

T sql根据不同的日期按2行排序

来自分类Dev

T-SQL:如何根据最大日期选择行?

来自分类Dev

在T-SQL中按日期范围分组

来自分类Dev

根据SQL Server中的唯一日期选择记录,并计算该日期有多少记录

来自分类Dev

根据范围拆分记录

来自分类Dev

在JDBC中根据日期提取记录

来自分类Dev

T-SQL从其他日期分组的简单日期列表中总结日期范围

来自分类Dev

使用t-sql根据其他表中的日期查找值

来自分类Dev

根据日期选择记录

来自分类Dev

表中的T-SQL日期范围拆分并将单个日期添加到表中

来自分类Dev

表中的T-SQL日期范围拆分并将单个日期添加到表中

来自分类Dev

根据指定的记录数少于总数(例如,5000条记录中的1000条)更新字段

来自分类Dev

如何在SQL中根据任意的每月周期日期范围汇总值?

来自分类Dev

使用sas或sql根据月度日期变量将新记录添加到表中

来自分类Dev

如何根据 SQL 查询中其他聚合列的日期获取最后一条记录

来自分类Dev

在Python中根据当前日期显示日期范围

来自分类Dev

如何根据Sql查询中的AcctName汇总数据

来自分类Dev

在SQL中查找日期范围重叠的记录

来自分类Dev

根据条件列出范围和总数

Related 相关文章

  1. 1

    在Oracle SQL中根据重叠的日期范围连接客户端记录

  2. 2

    根据日期范围查找记录

  3. 3

    BIRT中根据日期统计sql记录

  4. 4

    T-SQL 根据值组合范围

  5. 5

    如何根据日期计算查询中的总数?

  6. 6

    根据最近的日期在SQL Server中插入记录

  7. 7

    根据T-SQL中多个相关记录的排序顺序对记录进行排名?

  8. 8

    SQL根据另一个表中的日期范围查找日期在表中的位置

  9. 9

    根据答案计算记录总数

  10. 10

    根据日期 SQL 删除旧记录

  11. 11

    T sql根据不同的日期按2行排序

  12. 12

    T-SQL:如何根据最大日期选择行?

  13. 13

    在T-SQL中按日期范围分组

  14. 14

    根据SQL Server中的唯一日期选择记录,并计算该日期有多少记录

  15. 15

    根据范围拆分记录

  16. 16

    在JDBC中根据日期提取记录

  17. 17

    T-SQL从其他日期分组的简单日期列表中总结日期范围

  18. 18

    使用t-sql根据其他表中的日期查找值

  19. 19

    根据日期选择记录

  20. 20

    表中的T-SQL日期范围拆分并将单个日期添加到表中

  21. 21

    表中的T-SQL日期范围拆分并将单个日期添加到表中

  22. 22

    根据指定的记录数少于总数(例如,5000条记录中的1000条)更新字段

  23. 23

    如何在SQL中根据任意的每月周期日期范围汇总值?

  24. 24

    使用sas或sql根据月度日期变量将新记录添加到表中

  25. 25

    如何根据 SQL 查询中其他聚合列的日期获取最后一条记录

  26. 26

    在Python中根据当前日期显示日期范围

  27. 27

    如何根据Sql查询中的AcctName汇总数据

  28. 28

    在SQL中查找日期范围重叠的记录

  29. 29

    根据条件列出范围和总数

热门标签

归档