繁体   English   中英

无法让 SQL Server 子查询选择所需的结果

[英]Trouble getting SQL Server subquery to pick desired results

我得到了一个在 SQL 服务器中使用的数据库。 这些表是:

  • 价格(产品 ID,来自,价格)
  • 产品(产品 ID、名称、数量)
  • 采购订单(产品 ID、订单 ID、金额)
  • 订单(orderID、日期、地址、状态、trackingNumber、custID、shipID)
  • 运输(shipID、公司、时间、价格)
  • 客户(客户 ID、姓名)
  • 地址(addrID、custID、地址)

我需要确定每个产品的 ID 和当前价格。

Price表中的from属性是价格更新的日期,即表中的每个 ID 都有多个与之关联的价格和日期,但所有 ID 之间没有共同的日期,日期在 'YYYY-MM 中-DD' 格式和范围是从 2018 到 2019-12-31。

我当前的查询如下所示:

select distinct p.prodID, p.price
from Price as p
where p.[from] >= '2019-12-23' and p.[from] in (select [from]
from Price
group by [from]
having max([from]) <= '2019-12-31')
order by p.prodID;

它返回一个表,其中包含一些 ID 的多个价格,并且还完全排除了其他 ID。

有人告诉我,我需要一个子查询来执行此操作。

我相信我的查询可能过于具体而无法产生所需的结果。

我的主要目标是修复我当前的查询以从最近from日期中选择每个prodIDprice之一。

一种选择使用窗口函数:

select *
from (
    select p.*, row_number() over(partition by p.prodid order by p.from desc) rn
    from price p
    where p.from <= convert(date, getdate())
) t
where rn = 1

这将返回每个prodid的最新行,其中from不大于当前日期。

作为替代方案,您还可以with ties使用:

select top (1) with ties p.*
from price p
where p.from <= convert(date, getdate())
order by row_number() over(partition by p.prodid order by p.from desc)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM