Reputation: 53
This is Parent_Child table.
PARENT CHILD EFF_DATE
22716 2528 3/8/2011
22716 5696 3/8/2011
22716 3698 3/8/2011
22716 5698 3/18/2010
37091 4569 10/22/2013
37091 6931 9/17/2014
Query result should look like this:
PARENT CHILD EFF_DATE
22716 2528 3/8/2011
22716 5696 3/8/2011
22716 3698 3/8/2011
37091 6931 9/17/2014
Query tried:
SELECT DISTINCT P.PARENT,P.CHILD,C.MAX_DATE
FROM parent_child P
INNER JOIN
(SELECT CHILD,MAX(EFF_DT) AS MAX_DATE
FROM parent_child
GROUP BY CHILD) C
ON P.CHILD=C.CHILD AND P.EFF_DT=C.MAX_DATE
ORDER BY P.PARENT
But I end up getting both the values of parent 37091.
Appreciate any help on this.
Upvotes: 0
Views: 32
Reputation: 3833
Changes required
- change inner query to group on parent instead of child
- change join condition to match on parent
query
SELECT DISTINCT P.PARENT,P.CHILD,C.MAX_DATE
FROM parent_child P
INNER JOIN
(SELECT PARENT,MAX(EFF_DT) AS MAX_DATE
FROM parent_child
GROUP BY PARENT) C
ON P.PARENT=C.PARENT
AND P.EFF_DT=C.MAX_DATE
ORDER BY P.PARENT
;
output
PARENT CHILD MAX_DATE 22716 2528 March, 08 2011 00:00:00 22716 5696 March, 08 2011 00:00:00 22716 3698 March, 08 2011 00:00:00 37091 6931 September, 17 2014 00:00:00
Upvotes: 1