sql - 如何显示与所选日期最近的日期
问题描述
我正在尝试在特定日期提取库存。为此,我正在按日期、产品和仓库累计库存变动。
select m.codart AS REF,
m.descart AS 'DESCRIPTION',
m.codalm AS WAREHOUSE,
m.descalm AS WAREHOUSEDESCRIP,
m.unidades AS UNITS,
m.entran AS 'IN',
m.salen AS 'OUT',
m.entran*1 + m.salen*-1 as MOVEMENT,
(select sum(m1.entran*1 + m1.salen*-1)
from MOVSTOCKS m1
where m1.codart = m.codart and m1.codalm = m.codalm and m.fecdoc >= m1.fecdoc) as 'CUMULATIVE',
m.PRCMEDIO as 'VALUE',
m.FECDOC as 'DATE',
m.REFERENCIA as 'REF',
m.tipdoc as 'DOCUMENT'
from MOVSTOCKS m
where (m.entran <> 0 or m.salen <> 0)
and (select max(m2.fecdoc) from MOVSTOCKS m2) < '2020-11-30T00:00:00.000'
order by m.fecdoc
如果没有and (select max(m2.fecdoc) from MOVSTOCKS m2) < '2020-11-30T00:00:00.000'
它,它会显示这样的数据,这没关系。
REF WAREHOUSE UNITS IN OUT MOVEMENT CUMULATIVE DATE
1 0 2 0 2 -2 -7 2020-11-25
1 1 3 0 3 -3 -3 2020-11-25
1 0 5 0 5 -5 -7 2020-11-25
1 0 9 9 0 9 2 2020-11-26
2 0 2 2 0 2 2 2020-11-26
1 0 1 1 0 1 3 2020-12-01
问题是,使用 where 子句中的子选择它不会返回任何结果(我认为这是因为它只是查找最大日期并说它大于 2020-11-30)。我希望它显示与所选日期最接近的日期(所有日期,对于每个产品和仓库),在本例中为 2020-11-30。
它应该看起来像这样:
REF WAREHOUSE UNITS IN OUT MOVEMENT CUMULATIVE DATE
1 1 3 0 3 -3 -3 2020-11-25
1 0 9 9 0 9 2 2020-11-26
2 0 2 2 0 2 2 2020-11-26
对不起,如果我不清楚。问我是否需要澄清任何事情
谢谢
解决方案
我猜你想要这样的东西:
select t.*
from (select m.*,
sum(m.entran - m1.salen) over (partition by m.codart, m.codalm order by fecdoc) as cumulative,
max(fecdoc) over (partition by m.codart, m.codalm) as max_fecdoc
from MOVSTOCKS m
where fecdoc < '2020-11-30'
) m
where fecdoc = max_fecdoc;
子查询使用窗口函数和过滤器计算截止日期之前的记录的累积库存量。codeart
外部查询从/的组合中选择最近的记录codalm
,这似乎是您识别产品的方式。
推荐阅读
- java - Swagger codegen 为某些媒体类型生成的代码丢失方法
- java - 我可以在单元测试期间为成员变量设置值吗?
- dependency-injection - Kephas 中的 AmbientServices 和 CompositionContext 有什么区别?
- hadoop - 设置多节点 hadoop 集群 Blockpool ID 不匹配
- svg - 如何在具有 JavaScript 代码的 SVG 文档中包含 SVG?
- android - 如何随机附加和删除 EventListener
- awk - 如何使用 grep 和 awk 提取特定值
- debugging - 在刷新 Firefox 时保留断点
- amazon-web-services - 在aws中使用https for flask api 无需购买域名
- php - 错误 - 未为突变配置架构,尽管架构中包含突变