我正在處理SQL查詢,並且卡住了。在一個查詢中有問題的子查詢
查詢結果應包含列如下:
- ItemCode(這是唯一產品編號)
- LatestReceiptDate(這是ItemCode的最新簽收日期爲準)
- LatestIssueDate(ItemCode的最新發布日期)
我試圖在主查詢中使用子查詢,但結果我在LatestIssueDate
和LatestReceiptdate
的每一行中得到了相同的日期
就像這個...
Select Distinct
I.ItemCode,
LatestReceiptDate = (Select top 1 (MH.MoveDate)
from inItem as I
left join InMoveLn as ML on I.ItemID = ML.ItemID
inner join InMoveHd as MH on ML.InvMoveID = MH.InvMoveID
where Mh.transactiontypeID like '5001'
Order by Itemcode desc),
LatestIssueDate = (Select top 1 (MH.MoveDate)
From inItem as I
left join InMoveLn as ML on I.ItemID = ML.ItemID
inner join InMoveHd as MH on ML.InvMoveID = MH.InvMoveID
where Mh.transactiontypeID like
'5013'
or Mh.transactiontypeID like '5003'
Order by ItemCode desc)
from
initemstore as S
left join
initem as I on I.ItemId = S.ItemID
left join
inMoveLn as ML on ML.ItemID = S.ItemID
inner join
inMoveHd as MH on ML.InvMoveID=MH.InvMoveID
order by
I.Itemcode
我花了幾個小時,不能再往前走。我感謝所有幫助
這是我從使用上面的查詢得到
ItemCode LatestReceiptDate LatestIssueDate
100001 2011-09-12 15:26:18.000 2015-04-14 09:49:07.627
100002 2011-09-12 15:26:18.000 2015-04-14 09:49:07.627
100003 2011-09-12 15:26:18.000 2015-04-14 09:49:07.627
100004 2011-09-12 15:26:18.000 2015-04-14 09:49:07.627
100005 2011-09-12 15:26:18.000 2015-04-14 09:49:07.627
你不必使用「top 1」來檢索每個ItemCode的最後日期。這樣,你總是檢索所有表格的最後日期。 您必須使用「MAX(MH.MoveDate)」和「GROUP BY ItemCode」子句來獲取每組ItemCode的最後日期。 –
我試過MAX但收到錯誤:子查詢返回的值超過1。當子查詢遵循=,!=,<, <= , >,> =或當子查詢用作表達式時,這是不允許的。 – Brunoxp
子查詢返回具有相同MAX值的所有行。將DISTINCT子句添加到子查詢中。 –