I have Two tables, MachineWiseMaterial (Fields: McMatID) and MaterialIssueRegister (Fields: McMatID, IssueDate, IssueTime, EMR). I want the last issue date, time and EMR for each McMatID.
I can find the same for any individual McMatID using SELECT TOP 1 as follows.
x
SELECT TOP 1 McMatID, IssueDate, IssueTime, EMR
FROM MaterialIssueRegister
WHERE McMatID = [some value, eg. 1]
ORDER BY IssueDate DESC, IssueTime DESC, EMR DESC;
But when I’m trying to join both tables, I’m not getting desired results.
SELECT MachineWiseMaterial.McMatID, b.IssueDate, b.EMR
FROM MachineWiseMaterial
LEFT JOIN (SELECT TOP 1 McMatID, IssueDate, IssueTime, EMR
FROM MaterialIssueRegister
ORDER BY IssueDate DESC, IssueTime DESC, EMR DESC) AS b
ON MachineWiseMaterial.McMatID = b.McMatID;
The above query returns only those McMatID whose IssueDate are Max and not the max date for each McMatID.
Advertisement
Answer
You could try like this..
SELECT MachineWiseMaterial.McMatID, b.IssueDate, b.EMR
FROM MachineWiseMaterial m1
where m1.McMatId=(SELECT TOP 1 McMatID
FROM MaterialIssueRegister m2
where m2.McMatId=m1.McMatId
ORDER BY IssueDate DESC, IssueTime DESC, EMR DESC)