这种情况SQL如何计算? [关闭]

Posted

技术标签:

【中文标题】这种情况SQL如何计算? [关闭]【英文标题】:How to calculate this situation SQL? [closed] 【发布时间】:2020-08-22 06:11:48 【问题描述】:

我需要帮助查询情况,计算情况我不知道如何查询情况。

请任何帮助我继续这个项目,你可以指导我并为我举例

这是我拥有的数据样本:

Date       Usage  Plan
------------------------
2020-04-30 NULL   94928
2020-05-01 NULL   NULL
2020-05-02 NULL   NULL
2020-05-03 12269  NULL
2020-05-04 3253   NULL
2020-05-05 NULL   NULL
2020-05-06 NULL   NULL
2020-05-07 NULL   NULL
2020-05-08 500    1000
2020-05-09 NULL   NULL
2020-05-10 NULL   NULL
2020-05-11 NULL   NULL

所需的输出如下所示:

Date       Usage  Plan
-----------------------
2020-04-30 NULL   94928
2020-05-01 NULL   94928
2020-05-02 NULL   94928
2020-05-03 12269  82659
2020-05-04 3253   79406
2020-05-05 NULL   79406
2020-05-06 NULL   79406
2020-05-07 NULL   79406
2020-05-08 500    1000
2020-05-09 NULL   500
2020-05-10 NULL   500
2020-05-11 NULL   500

为示例数据创建表脚本:

CREATE TABLE [dbo].[Table_1]
(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [Date] [date] NULL,
    [ITEM_NUMBER] [varchar](max) NULL,
    [Plan_Matusage] [int] NULL,
    [St_plan] [int] NULL,
    [St_revise] [int] NULL,
    [St_actual] [int] NULL,
)

【问题讨论】:

什么条件导致计划获取值79406 @vvvv4d 条件此计划 - 用法 【参考方案1】:

您可以使用窗口函数。这个想法是构建相邻记录组,其窗口总和对于每个非空 plan 递增:

select 
    date,
    usage,
    coalesce(
        plan,
        max(plan) over(partition by grp)
            - coalesce(sum(usage) over(partition by grp order by date), 0)
   ) plan
from (
    select
        t.*,
        sum(case when plan is not null then 1 else 0 end) over(order by date) grp
    from mytable t
) t
order by date 

【讨论】:

【参考方案2】:

这行得通

with plan_group_cte as (
    select  t.*, sum(iif([Plan] is not null, 1, 0)) over(order by [Date]) plan_group
    from dbo.Table_1 t)
select [Date], [Usage], 
       coalesce([Plan],  (max([Plan]) over (partition by plan_group)-
       sum(cast([Usage] as int)) over (partition by plan_group order by [Date]))) [Plan]
from plan_group_cte
order by 1;

【讨论】:

以上是关于这种情况SQL如何计算? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用条件语句在 SQL 中排序 [关闭]

如何使用 AWS Redshift Data API 使用 Java 执行 SQL? [关闭]

SQLite如何计算同一张表的两个变量之间的差异[关闭]

如何创建跟踪 (SQL Server Profiler)

SQL:在这种情况下如何按 sql 顺序查询

在以下情况下如何提高 sql 性能[关闭]