从 table 计算数据序列

Calculating the sequence of data from a table

我有一个 table 是从一些 sql 生成的。我需要从中进一步获得以下规则,但被卡住了,非常感谢您的帮助。

对于每 3 个连续的周期,添加天数。

当前的table是在SQL的更复杂的计算版本上推导出来的,以生成table,下面是它的基础:

SELECT Cycle, Days
FROM Leave

当前 Table:

 - Cycle: 1,2,3,4,5,6,7,8
 - Days: 7,8,7,6,9,5,4,9

期望的结果

虽然你没有提到你的DBMS名称,但以下是MSSQL和MySQL的2个解决方案。如果您有其他 DBMS,您也可以应用相同的逻辑。

MSSQL:

SELECT 
CAST(A.cycle AS VARCHAR) 
    +','+ CAST(B.cycle AS VARCHAR) 
    +','+ CAST(C.cycle AS VARCHAR) Cycles, 
A.days+B.days+C.days Days
FROM your_table A
CROSS APPLY your_table B
CROSS APPLY your_table C
WHERE C.cycle = B.cycle+1 AND B.cycle = A.cycle+1
ORDER BY A.cycle

MySQL:

SELECT 
CONCAT(CAST(A.cycle AS CHAR) 
    ,',', CAST(B.cycle AS CHAR) 
    ,',', CAST(C.cycle AS CHAR)) Cycles, 
A.days+B.days+C.days Days
FROM your_table A
CROSS JOIN your_table B
CROSS JOIN your_table C
WHERE C.cycle = B.cycle+1 AND B.cycle = A.cycle+1
ORDER BY A.cycle;

您可以使用累计和:

select t.*,
       sum(days) over (order by cycle rows between 2 preceding and current row)
from t;

注意:对于前两行,您将得到的值不是三天的总和。处理此问题的一种方法是使用 lag() 代替:

select t.*,
       (days +
        lag(days, 1) over (order by cycle) +
        lag(days, 2) over (order by cycle)
       )
from t;

前两行 return NULL