簡體   English   中英

SQL查詢返回最大記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM