首页 > 解决方案 > MS SQL 统计过去 7 天内满足相同条件的案例数

问题描述

我想在 SQL“PriorityCountInLast7Days”中生成一个列,该列计算优先级与该情况相同的情况的数量。我如何在 SQL 中执行此操作?

对于每个 Emp1,计算 priorityinthelast7days = priorityatcurrentdate 的数量以生成 PriorityCountinLast7days。大小写只是每一行的唯一标识符。

+------------+------+----------+--------------------------+
|    Date    | Emp1 | Priority | PriorityCountinLast7days |
+------------+------+----------+--------------------------+
| 2018-06-01 | A    |        0 |                        0 |
| 2018-06-03 | A    |        0 |                        1 |
| 2018-06-03 | A    |        0 |                        2 |
| 2018-06-03 | A    |        1 |                        1 |
| 2018-06-03 | A    |        2 |                        1 |
| 2018-06-04 | A    |        0 |                        3 |
| 2018-06-01 | B    |        0 |                        1 |
| 2018-06-02 | B    |        0 |                        2 |
| 2018-06-03 | B    |        0 |                        3 |
+------------+------+----------+--------------------------+

标签: sqlsql-servercountconditional-statements

解决方案


您可以尝试交叉应用子查询,该查询从相对于当前行的日期的最后 7 天获取具有相同优先级的同一员工的案例计数。

SELECT t1.date,
       t1.emp1,
       t1.[case],
       t1.priority,
       x.c prioritycountinlast7days
       FROM elbat t1
            CROSS APPLY (SELECT count(*) c
                                FROM elbat t2
                                WHERE t2.emp = t1.emp
                                      AND t2.priority = t1.priority
                                      AND t2.date >= dateadd(day, -7, t1.date)
                                      AND t2.date <= t1.date) x;

我仍然不知道,是否应该计算当前的案例。随着更多的样本数据表明是的,我就是这样写的。如果不应该计算,请添加AND t2.case <> t1.caseWHERE子句中。


推荐阅读