You did not provide enough information to give you exact suggestion. There is only one: you need to read about aggregate functions:
http://www.w3schools.com/sql/sql_groupby.asp[
^]
http://msdn.microsoft.com/en-us/library/ms177673%28v=sql.100%29.aspx[
^]
http://www.w3schools.com/sql/sql_func_max.asp[
^]
http://msdn.microsoft.com/en-us/library/aa933240%28v=sql.80%29.aspx[
^]
[EDIT #3]
DECLARE @tbl TABLE (categoryid INT, catdate DATETIME, subcategoryid INT, subcatdate DATETIME)
INSERT INTO @tbl (categoryid, catdate, subcategoryid, subcatdate)
VALUES(123, '5/01/2013', 12345, '04/12/2013')
INSERT INTO @tbl (categoryid, catdate, subcategoryid, subcatdate)
VALUES(123, '5/01/2013', 23456, '03/21/2013')
INSERT INTO @tbl (categoryid, catdate, subcategoryid, subcatdate)
VALUES(123, '5/01/2013', 32165, '02/02/2012')
INSERT INTO @tbl (categoryid, catdate, subcategoryid, subcatdate)
VALUES(124, '5/01/2013', 36598, '02/02/2012')
INSERT INTO @tbl (categoryid, catdate, subcategoryid, subcatdate)
VALUES(124, '5/01/2013', 52487, '02/02/2012')
INSERT INTO @tbl (categoryid, catdate, subcategoryid, subcatdate)
VALUES(124, '5/01/2013', 78954, '04/02/2012')
SELECT t1.categoryid, t1.catdate, t1.subcategoryid, t2.subcatdate
FROM @tbl AS t1 RIGHT JOIN (
SELECT categoryid, MAX(subcatdate) AS subcatdate
FROM @tbl
GROUP BY categoryid
) AS t2 ON t1.categoryid = t2.categoryid AND t1.subcatdate = t2.subcatdate
Results:
123 2013-05-01 00:00:00.000 12345 2013-04-12 00:00:00.000
124 2013-05-01 00:00:00.000 78954 2012-04-02 00:00:00.000
[/EDIT]