我正在处理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子句添加到子查询中。 –