SQL Server-仅选择最新日期
RDBMS=Microsoft SQL Server 我在一家制冷公司工作,我们想更好地跟踪每个库存地点购买的制冷剂瓶的成本。我试图创建一个SQL查询来提取这些信息,但遇到了一些问题。对于每个库存位置,我想显示该库存位置上一次购买制冷剂的成本。我想查看我们记录的该位置购买特定制冷剂的最新日期。我尝试过使用Max函数,但没有成功,而Row_Number函数也没有成功。任何帮助都将不胜感激 见下面的代码示例,我试图只显示每个库存位置购买R-22 30磅水罐的最新日期SQL Server-仅选择最新日期,sql,sql-server,greatest-n-per-group,Sql,Sql Server,Greatest N Per Group,RDBMS=Microsoft SQL Server 我在一家制冷公司工作,我们想更好地跟踪每个库存地点购买的制冷剂瓶的成本。我试图创建一个SQL查询来提取这些信息,但遇到了一些问题。对于每个库存位置,我想显示该库存位置上一次购买制冷剂的成本。我想查看我们记录的该位置购买特定制冷剂的最新日期。我尝试过使用Max函数,但没有成功,而Row_Number函数也没有成功。任何帮助都将不胜感激 见下面的代码示例,我试图只显示每个库存位置购买R-22 30磅水罐的最新日期 select lctn
select
lctn_id as Location,
invntryitm_id as InventoryItemID,
invntryitm_nme as InventoryItemName,
prchseordrlst_dte_rqstd as DateRequested,
prchseordrlst_unt_cst as UnitCost
from
invntryitm
join
prchseordrlst on prchseordrlst.invntryitm_rn = invntryitm.invntryitm_rn
join
prchseordr on prchseordr.prchseordr_rn = prchseordrlst.prchseordr_rn
join
lctn on lctn.lctn_rn = prchseordr.lctn_rn
where
invntryitm.invntryitm_nme ='REFRIGERANT R-22 30#'
and lctn_obslte = 'N'
group by
lctn.lctn_id, invntryitm.invntryitm_id, invntryitm.invntryitm_nme,
prchseordrlst.prchseordrlst_unt_cst
order by
lctn_id
我认为分析/窗口功能可以满足您的需求:
with location_data as (
select
lctn_id as Location,
invntryitm_id as InventoryItemID,
invntryitm_nme as InventoryItemName,
prchseordrlst_dte_rqstd as DateRequested,
prchseordrlst_unt_cst as UnitCost,
max (prchseordrlst_dte_rqstd) over (partition by lctn_id) as max_date
from
invntryitm
JOIN prchseordrlst on prchseordrlst.invntryitm_rn = invntryitm.invntryitm_rn
JOIN prchseordr on prchseordr.prchseordr_rn = prchseordrlst.prchseordr_rn
JOIN lctn on lctn.lctn_rn = prchseordr.lctn_rn
where
invntryitm.invntryitm_nme ='REFRIGERANT R-22 30#' and
lctn_obslte = 'N'
)
select *
from location_data
where max_date = DateRequested
order by Location
请记住,如果有一个平局,两个地点id记录的日期相同,那么您将同时获得这两个记录。如果这是一个问题,那么您可能需要行编号()
而不是max()
:
然后你会
where rn = 1
第一排
我没有首先列出
row_number()
的原因是max
是O(n),如果您的数据有日期和时间,它可能足以满足您的需要。为什么您不能让row_number函数工作?你有错误吗?请发布您的尝试,以便我们可以调试它。老实说,我以前从未使用过行数函数,我不理解它。非常感谢您!这两种解决方案都非常有效。
where rn = 1