本示例是:查询药品最后一次采购的供应商和采购日期时间。注意:WITH (NOLOCK)只是为了防止查询时表死锁,如果你的表不会死锁,可以删除WITH (NOLOCK)
方式一:按日期时间倒序排序取第一条为条件,此方式效率最低,查询速度非常慢,8028条数据29秒,此方式不推荐使用
SELECT P_id,商品名称,最后一次供应商,最后一次采购时间
FROM
(SELECT Auto_id AS P_id FROM dbo.Products) sp --商品表
LEFT JOIN
(SELECT P_id AS cgP_id,商品名称,供应商 AS 最后一次供应商,记账时间 AS 最后一次采购时间 FROM dbo.Productdetail WITH (NOLOCK) WHERE 单据类型 = '采购入库单') cg --单据明细表
ON cg.cgP_id = sp.P_id AND cg.最后一次采购时间 = (SELECT TOP 1 记账时间 FROM dbo.Productdetail WITH (NOLOCK) WHERE 单据类型 = '采购入库单' AND P_id = sp.P_id ORDER BY 记账时间 DESC) --按日期时间倒序排序取第一条(即采购最大日期时间)为条件
WHERE 最后一次采购时间 BETWEEN '2023-01-01 00:00:00' AND '2024-06-30 23:59:59'
ORDER BY 最后一次采购时间
方式二:按最大日期时间为条件,比方式