仅返回最新行[重复]
Posted
技术标签:
【中文标题】仅返回最新行[重复]【英文标题】:To return only the latest row [duplicate] 【发布时间】:2012-11-27 06:54:48 【问题描述】:我有一个名为 TRANSFER 的存储事务的表。我需要编写一个查询以仅返回给定库存标签的最新交易条目(这是识别材料的唯一键),因此我使用了以下查询
SELECT a.TRANSFER_ID
, a.TRANSFER_DATE
, a.ASSET_CATEGORY_ID
, a.ASSET_ID
, a.TRANSFER_FROM_ID
, a.TRANSFER_TO_ID
, a.STOCK_TAG
FROM TRANSFER a
INNER JOIN (
SELECT STOCK_TAG
, MAX(TRANSFER_DATE) maxDATE
FROM TRANSFER
GROUP BY STOCK_TAG
) b
ON a.STOCK_TAG = b.STOCK_TAG AND
a.Transfer_Date =b.maxDATE
但是我遇到了一个问题,即当在同一个转移日期发生多个转移时,它会返回所有行,因为我只需要最新的。我怎样才能得到最新的行?
编辑:
transfer_id transfer_date asset_category_id asset_id stock_tag
1 24/12/2010 100 111 2000
2 24/12/2011 100 111 2000
【问题讨论】:
如果两个转账发生在同一天,您希望如何确定哪一个是最新的? (如果TRANSFER.TRANSFER_ID
是一个递增字段,您可以在子查询中选择MAX(TRANSFER_ID)
,然后加入该值。)
@cdhowie 嗨,该解决方案有效,谢谢 :)
酷。添加它作为答案。
如果您曾经遇到过没有按 transfer_date 顺序插入记录的情况,那么这种加入 max transfer_id 和 transfer_id 的逻辑将失败。我自己不会依赖它。
【参考方案1】:
为避免可能出现的行未按 transfer_date 顺序插入的情况,并且可能出于性能原因,您不妨尝试一下:
select
TRANSFER_ID ,
TRANSFER_DATE ,
ASSET_CATEGORY_ID,
ASSET_ID ,
TRANSFER_FROM_ID ,
TRANSFER_TO_ID ,
STOCK_TAG
from (
SELECT
TRANSFER_ID ,
TRANSFER_DATE ,
ASSET_CATEGORY_ID,
ASSET_ID ,
TRANSFER_FROM_ID ,
TRANSFER_TO_ID ,
STOCK_TAG ,
row_number() over (
partition by stock_tag
order by transfer_date desc,
transfer_id desc) rn
FROM TRANSFER)
where rn = 1
【讨论】:
【参考方案2】:考虑在您的子查询中选择 MAX(TRANSFER_ID)
,假设 TRANSFER_ID
是一个递增字段,这样以后的传输总是比之前的传输具有更大的 ID。
【讨论】:
虽然该解决方案有效。还有其他方法吗? 不是从我所看到的给定您的架构。考虑将TRANSFER_DATE
调整为日期时间列。那么您在查找最新订单时将具有第二精度。
那将是值得考虑的事情,谢谢。以上是关于仅返回最新行[重复]的主要内容,如果未能解决你的问题,请参考以下文章
CrudRepository:返回一个结果,按列排序[重复]
根据日期仅选择每条记录的最新版本 | MS Access [重复]