[英]SQL query to return max record
我有两个带有以下字段的表
Order Header
TransID, InvoiceDate
Order Detail
TransID, PartID
我正在尝试编写一个查询,该查询将返回自特定日期以来没有订单标题条目的那些部件。
标题表每个Transid有1行,其中明细表可以有多行。
这是我一直在尝试的方法:
select h.transid,partid, h.invoicedate
from tblaphistdetail d
right outer join tblaphistheader h
on d.transid = h.transid
where partid <> ''
and h.invoicedate <= dateadd(yyyy,-2,getdate())
group by h.transid,partid, invoicedate
order by partid
这将返回在特定日期(今天之前的2年)之前的那些零件和暂态记录,但是这些零件也具有在过去2年内具有发票日期的暂态记录。
谁能帮我?
更改:
and h.invoicedate <= dateadd(yyyy,-2,getdate())
至:
and h.transid NOT IN (SELECT transid
FROM tblaphisheader
WHERE invoicedate > dateadd(yyyy,-2,getdate()))
更新:
select h.transid,partid, h.invoicedate
from tblaphistdetail d
inner join tblaphistheader h
on d.transid = h.transid
where partid <> ''
and partid NOT IN (SELECT partid
FROM tblaphisdetail d
INNER JOIN tblaphistheader h
ON d.transid - h.transid
WHERE invoicedate > dateadd(yyyy,-2,getdate()))
group by h.transid,partid, invoicedate
order by partid
如果您只想包含存在订单的零件,而不包括自特定日期以来的零件,则可以尝试以下操作:
SELECT
d.PartID,
MAX(h.InvoiceDate) AS LastOrdered
FROM
dbo.tblaphistdetail AS d
INNER JOIN
dbo.tblaphistheader AS h ON d.TransID = h.TransID
GROUP BY
d.PartID
HAVING
MAX(h.InvoiceDate) < @SpecificDate
;
如果有一个包含所有可用Parts
表,而您想包括那些从未包含在发票中的零件,则这是另一种解决方案:
SELECT
p.PartID,
MAX(h.InvoiceDate) AS LastOrdered
FROM
dbo.tblaphistdetail AS d
INNER JOIN
dbo.tblaphistheader AS h ON d.TransID = h.TransID
RIGHT JOIN
dbo.Parts AS p ON d.PartID = p.PartID
GROUP BY
p.PartID
HAVING
MAX(h.InvoiceDate) < @SpecificDate
OR MAX(h.InvoiceDate) IS NULL
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.