2012-01-31 24 views
0

好的,我主要处理相当简单的SQL,事实上,我目前的问题似乎应该很简单,但我一直没有能够提出正确的搜索条件来寻找解决方案。我以一对多的关系加入两张桌子。我想按第二张表中的日期字段进行排序,同时按PK对结果进行分组。SQL加入订单结果的日期和PK

MAIN 
-- 
MAINID, ACTION, DIVISION 
000001, HRREC, I 
000002, AUDIT, IV 
000003, TRAVEL, II 

SECONDARY 
-- 
MAINID, AUTHUSER, LOGINDATE, COMMENTS 
000002, Fred,  01/02/2012, Needs work 
000001, Smitty, 01/05/2012, making brisk progress 
000003, Fred,  03/10/2012, blah blah 
000002, Jimmy, 02/15/2011, something 
000001, Bill,  01/01/2012, neener neener 
000002, Saul,  12/13/2011, no action 

DESIRED OUTPUT 
-- 
MAINID, ACTION, DIVISION, AUTHUSER, LOGINDATE, COMMENTS 
000003, TRAVEL, II,  Fred,  03/10/2012, blah blah 
000001, HRREC, I,  Smitty, 01/05/2012, making brisk progress 
000001, HRREC, I,  Bill,  01/01/2012, neener neener 
000002, AUDIT, IV,  Fred,  01/02/2012, Needs work 
000002, AUDIT, IV,  Saul,  12/13/2011, no action 
000002, AUDIT, IV,  Jimmy, 02/15/2011, something 

The basic join I'd like to order 
-- 
SELECT MAIN.MAINID,MAIN.DIVISION,MAIN.ACTION,SECONDARY.AUTHUSER,SECONDARY.LOGINDATE,SECONDARY.COMMENTS 
FROM MAIN 
LEFT JOIN SECONDARY ON MAIN.MAINID=SECONDARY.MAINID; 

谢谢!

+0

不清楚你所说的“分组由PK结果”的意思;如果日期必须按MAINID推荐的每个MAINID组进行排序?也许MAINID按MAX(LOGINDATE)排序? – 2012-01-31 14:08:52

回答

1

如果您想通过LOGINDATE订购内通过MAINID与MAX(LOGINDATE)排序组由组你sholud做到这一点:

SELECT 
    M.MAINID, 
    M.DIVISION, 
    M.ACTION, 
    S.AUTHUSER, 
    S.LOGINDATE, 
    S.COMMENTS 
FROM MAIN M LEFT OUTER JOIN (
     SELECT 
      MAINID, 
      MAX(LOGINDATE) MAXDATE 
     FROM SECONDARY 
     GROUP BY 
      MAINID 
    ) Q 
      ON M.MAINID=Q.MAINID 
     LEFT JOIN SECONDARY S 
      ON M.MAINID=S.MAINID 
ORDER BY 
    MAXDATE, LOGINDATE; 
+1

+1:虽然我会稍微改变它,因为子查询中不需要连接。 '主要LEFT JOIN次要LEFT JOIN(选择mainid,MAX(logindate)从次要GROUP BY mainid)'... – MatBailie 2012-01-31 14:35:57

+0

你是对的。相应地编辑我的答案。 – 2012-01-31 14:54:19

+0

非常感谢,非常有帮助! – CBR 2012-01-31 18:19:51