MsSQL如何在一次查询中从给定的日期和仓库号获取最近的未来值和值的总和

Posted

技术标签:

【中文标题】MsSQL如何在一次查询中从给定的日期和仓库号获取最近的未来值和值的总和【英文标题】:MsSQL how to get nearest future value and sum of value from given date and warehouse number in one query 【发布时间】:2020-09-16 13:28:23 【问题描述】:

我有如下数据

我需要按仓库选择未来值的总和,并按仓库选择最接近的未来值。

例如。结果应该是这样的(如果 getdate() = 16-09-2020):

一个查询就可以做到吗?

【问题讨论】:

【参考方案1】:

您只能使用窗口函数:

select *
from (
    select 
        warehouse, 
        sum(value) over(partition by warehouse) sum_future_value
        value nearest_future_value,
        date  nearest_future_date,
        row_number() over(partition by warehouse order by date) rn
    from mytable
    where date > getdate()
) t
where rn = 1

在子查询中,我们过滤未来的日期,按仓库计算即将到来的值的总和,并对记录进行排名。剩下要做的就是过滤每个组的较早记录。

【讨论】:

【参考方案2】:

过滤后可以使用窗口函数和条件聚合:

select warehouse, sum(value),
       max(case when seqnum = 1 then value end) as nearestfuturevalue,
       min(date) as nearestfuturedate
from (select t.*,
             row_number() over (partition by warehouse order by date) as seqnum
      from t
      where date > getdate()
     ) t
group by warehouse

【讨论】:

以上是关于MsSQL如何在一次查询中从给定的日期和仓库号获取最近的未来值和值的总和的主要内容,如果未能解决你的问题,请参考以下文章

Instagram Basic API:是不是可以在一次查询中从“CAROUSEL_ALBUM”获取 media_url?

如何在一次查询中从购买数量中减去销售数量? [复制]

如何在django模板中从给定日期起特定天数后获取日期

如何在sql中从给定的月份和年份获取月份的第一天和最后一天

如何在C中从一年和iso周中获取日期#

如何使用 Gremlin 在一次查询中同时获取节点属性和边名?