SQL Server 根据日期比较地点

66bbxpm5  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(108)

我正在尝试做一个SQL查询,它显示基于比较的数据。这将涉及使用一个表,跟踪每天的库存,称为InventoryByDate。我需要它做的是显示所有的库存,在位置“失去”昨天,然后在任何其他位置今天。我还没有真正看到任何这样的东西的例子,所以帮助将不胜感激。
((库存日期= DATEADD(天,DATEDIFF(天,0,GETDATE()),-1)AND位置名称=“丢失”)AND(库存日期= DATEADD(天,DATEDIFF(天,0,GETDATE()),0)AND NOT位置名称=“丢失”))
我希望括号允许这样做,但在执行时没有得到任何结果

6mzjoqzu

6mzjoqzu1#

首先 , 在 提出 这样 的 问题 时 , 您 应该 提供 演示 数据 , 最 好 是 演示 对象 , 或者 根据 需要 提供 对象 。
让 我 来 介绍 一下 这 将 是 什么 样子 :
第 一 个
这 设置 了 易于 复制 的 对象 , 我们 可以 使用 这些 对象 来 演示 您 所 拥有 的 与 您 所 需要 的 。
现在 来 回答 这个 问题 。 你 想 找到 昨天 丢失 的 物品 , 今天 就 有 一 个 商店 。
第 一 次
如果 一 个 产品 的 每个 日期 都 有 一 行 , 那么 这种 方法 就 很 有效 。 但是 , 根据 表 的 工作 方式 , 您 可能 只有 到达 日期 , 仅此 而已 。
不用 担心 , 我们 可以 用 一 点 窗口 函数 魔法 来 填补 空白 !
让 我们 替换 ProductsAndLocations 的 内容 :

DELETE FROM @ProductsAndLocations
INSERT INTO @ProductsAndLocations (ProductID, LocationID, ArrivedDate) VALUES
(1, 1, '2022-11-04'), (1, 3, '2022-11-07'), (1, 2, '2022-11-10'),
(2, 1, '2022-11-04'), (2, 3, '2022-11-07'), (2, 2, '2022-11-10'),
(3, 1, '2022-11-04'), (3, 2, '2022-11-08'),
(4, 1, '2022-11-04'), (5, 1, '2022-11-07'), (6, 1, '2022-11-10')

格式
现在 , 我们 只有 隔开 的 ArrivedDate 值 。

SELECT *
  FROM (
        SELECT pl.ProductID, pl.LocationID, pl.ArrivedDate, LEAD(pl.ArrivedDate,1) OVER (PARTITION BY pl.ProductID ORDER BY pl.ArrivedDate) AS LeftDate
          FROM @ProductsAndLocations pl
       ) pld
    INNER JOIN @Locations l
      ON pld.LocationID = l.ID
      AND l.Name = 'Lost'
 WHERE pld.LeftDate = CAST(CURRENT_TIMESTAMP AS DATE)

格式
在 这里 我们 计算 出 下 一 行 出现 的 时间 , 并 从中 创建 一 个 ' LeftDate ' 列 。 使用 该 列 中 的 值 , 并 将 其 限制 在 Lost 位置 , 我们 可以 只 选择 昨天 离开 Lost 位置 的 行 :

ProductID   LocationID  ArrivedDate LeftDate    ID  Name
--------------------------------------------------------
1           3           2022-11-07  2022-11-10  3   Lost
2           3           2022-11-07  2022-11-10  3   Lost

格式

相关问题