Sql server 2008 如何通过SQL中的另一列选择具有最大值(列值)的行组?

Sql server 2008 如何通过SQL中的另一列选择具有最大值(列值)的行组?,sql-server-2008,tsql,group-by,sql-order-by,Sql Server 2008,Tsql,Group By,Sql Order By,我不知道如何通过另一列选择具有最大列值组的行。我有T-SQL CREATE PROC GET_USER AS BEGIN SELECT A.USER_ID, B.START_DATE , D.START_DATE, A.FULL_NAME,A.COST_CENTER, F.DEPARTMENT_NAME,G.BU_NAME FROM USERS A INNER JOIN USER_PERSON B ON A.USER_ID=B.USER_ID INNER JOIN TYPE_PERSON C

我不知道如何通过另一列选择具有最大列值组的行。我有T-SQL

CREATE PROC GET_USER
AS
BEGIN
SELECT  A.USER_ID, B.START_DATE , D.START_DATE, A.FULL_NAME,A.COST_CENTER,
F.DEPARTMENT_NAME,G.BU_NAME
FROM USERS A INNER JOIN USER_PERSON B ON A.USER_ID=B.USER_ID
INNER JOIN TYPE_PERSON C ON C.TYPE_PERSON_ID = B.TYPE_PERSON_ID
INNER JOIN USER_TRANSACTION D ON D.USER_ID = A.USER_ID
INNER JOIN TRANSACTIONS E ON E.TRANSACTION_ID = D.TRANSACTION_ID
INNER JOIN DEPARTMENT F ON F.DEPARTMENT_ID = D.DEPARTMENT_ID
INNER JOIN BUS_UNIT G ON G.BU_ID = D.BU_ID
INNER JOIN BRANCH H ON H.BRANCH_ID = D.BRANCH_ID
INNER JOIN POSITION J ON J.POSITION_ID = D.POSITION_ID
WHERE A.FLAG = 'TRUE' 
END
结果将选择max(B.开始日期)和max(D.开始日期)并按用户ID分组

试试这个

SELECT  T.USER_ID ,
        MAX(T.START_DATE) AS [Max First Start Date] ,
        MAX(T.[Second Start Date]) AS [Max Second Start Date]
FROM    ( SELECT    A.USER_ID ,
                    B.START_DATE ,
                    D.START_DATE AS [Second Start Date] ,
                    A.FULL_NAME ,
                    A.COST_CENTER ,
                    F.DEPARTMENT_NAME ,
                    G.BU_NAME
          FROM      USERS A
                    INNER JOIN USER_PERSON B ON A.USER_ID = B.USER_ID
                    INNER JOIN TYPE_PERSON C ON C.TYPE_PERSON_ID = B.TYPE_PERSON_ID
                    INNER JOIN USER_TRANSACTION D ON D.USER_ID = A.USER_ID
                    INNER JOIN TRANSACTIONS E ON E.TRANSACTION_ID = D.TRANSACTION_ID
                    INNER JOIN DEPARTMENT F ON F.DEPARTMENT_ID = D.DEPARTMENT_ID
                    INNER JOIN BUS_UNIT G ON G.BU_ID = D.BU_ID
                    INNER JOIN BRANCH H ON H.BRANCH_ID = D.BRANCH_ID
                    INNER JOIN POSITION J ON J.POSITION_ID = D.POSITION_ID
          WHERE     A.FLAG = 'TRUE'
        ) AS T
GROUP BY T.USER_ID

当(对于特定的用户ID)MAX(B.START_DATE)在一行,而MAX(D.START_DATE)在另一行时,您希望得到什么结果?我认为B.START_DATE在表B中,D.START_DATE在表D中,不一样,我应该按用户ID分组,然后按B.START_DATE和D.START_DATE分组并选择MAX。好吧,我尝试了,但似乎有错误,结果是循环,我编辑了评论和答案。