多个最大值

时间:2017-04-24 20:58:33

标签: sql-server max

我想找到多个最长日期。我试过分组,但它只显示了最大最大日期。我感谢你的帮助。

MemberID    Contract    Group   Date
1   A   8   11/22/2016
1   A   61  10/19/2016
1   A   61  11/19/2015
1   A   8   7/26/2015
1   A   8   7/17/2014
1   A   8   7/17/2013
1   A   8   5/17/2013
1   A   8   3/26/2013

理想的结果是:

MemberID    Contract    Group   Date
1   A   8   11/22/2016
1   A   61  10/19/2016
1   A   8   7/26/2015

会员ID 1,合同A,第8组的两个最长日期。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我写这个假设你要比较其他群体。

DECLARE @priorGroup int = 8; -- Just change these two
DECLARE @currentGroup int = 61; -- numbers to compare other groups

WITH max_Dates AS (
SELECT MemberID,[Contract],[Group],MAX([Date]) AS 'Date'
FROM Table_1
WHERE [Group] IN (@priorGroup,@currentGroup)
GROUP BY MemberID,[Contract],[Group])

SELECT *
FROM max_Dates
WHERE [Group] = @priorGroup
UNION
SELECT TOP 1 MemberID,[Contract],[Group],MAX([Date]) AS 'Date'
FROM Table_1
WHERE [Group] = @priorGroup
       AND
      [Date] < (SELECT [Date]
                FROM max_Dates
                WHERE [Group] = @currentGroup)
GROUP BY MemberID,[Contract],[Group]

或者你可以试试这个日期在同一行

DECLARE @priorGroup int = 8;
DECLARE @currentGroup int = 61;

WITH max_Dates AS (
SELECT MemberID,[Contract],[Group],MAX([Date]) AS 'Date'
FROM Table_1
WHERE [Group] IN (@priorGroup,@currentGroup)
GROUP BY MemberID,[Contract],[Group])

SELECT MemberID,[Contract],[Group],
    (SELECT TOP 1 MAX([Date]) AS 'Date'
        FROM Table_1
        WHERE [Group] = @priorGroup
                AND
              [Date] < (SELECT [Date]
                        FROM max_Dates
                        WHERE [Group] = @currentGroup)
                        GROUP BY MemberID,[Contract],[Group]) AS 'PriorMax',
       (SELECT [Date]
        FROM max_Dates
        WHERE [Group] = @priorGroup) AS 'Current Max'
FROM max_Dates
WHERE [Group] = @priorGroup