Sql如何获取最大和最小历史数据以及相应的用户

Sql如何获取最大和最小历史数据以及相应的用户,sql,max,min,Sql,Max,Min,我有一张有HistoryDate和User的表。我需要为每个Review查询Max(Historydate)、与Maxdate对应的用户、Min(Historydate)、与MinDate对应的用户,如下所示 ModifiedDate |ModifiedBy| CreatedDate | CreatedBy |ReviewId 2/16/17 12:58 | Susan | 2/7/17 15:39 | John | 1 2/15/17 13:25 | Sam

我有一张有HistoryDate和User的表。我需要为每个Review查询Max(Historydate)、与Maxdate对应的用户、Min(Historydate)、与MinDate对应的用户,如下所示

   ModifiedDate |ModifiedBy| CreatedDate  | CreatedBy |ReviewId
  2/16/17 12:58 | Susan    | 2/7/17 15:39 | John      | 1
  2/15/17 13:25 | Sam      | 2/9/17 20:27 | John      | 2

我可以使用表变量查询它,但不知道是否有其他方法可以获得它。

尝试在
FROM
子句中使用子查询来获得每个最小值和最大值。为了只获得每次审阅的最小值和最大值,您需要使用
GROUP BY ReviewID
,如下所示:

SELECT max.date AS maxDate, max.user AS maxUser, min.date AS minDate, 
min.user AS minUser
FROM (
    (SELECT MAX(HistoryDate) date, user, ReviewID
    FROM HistoryTable
    GROUP BY ReviewID) max
        JOIN 
    (SELECT MIN(HistoryDate) date, user, ReviewID
    FROM HistoryTable
    GROUP BY ReviewID) min
        ON max.ReviewID = min.ReviewID
)

尝试在
FROM
子句中使用子查询来获取每个最小值和最大值。为了仅获取每次审阅的最小值和最大值,您需要使用
GROUP BY ReviewID
,如下所示:

SELECT max.date AS maxDate, max.user AS maxUser, min.date AS minDate, 
min.user AS minUser
FROM (
    (SELECT MAX(HistoryDate) date, user, ReviewID
    FROM HistoryTable
    GROUP BY ReviewID) max
        JOIN 
    (SELECT MIN(HistoryDate) date, user, ReviewID
    FROM HistoryTable
    GROUP BY ReviewID) min
        ON max.ReviewID = min.ReviewID
)

嗨,在玩了几天剧本之后,这对我来说很有效

SELECT ModifiedDate, ModifiedBy, CreatedDate ,CreatedBy,  crt.ReviewID 
     FROM   (SELECT  HistoryDate  CreatedDate, ReviewId,   [User] CreatedBy FROM HistoryTable 
        WHERE HistoryDate in (SELECT min(HistoryDate)  FROM  HistoryTable GROUP BY ReviewID )) crt
INNER JOIN
    (SELECT HistoryDate  ModifiedDate, ReviewID, [User] ModifiedBy FROM  HistoryTable 
        WHERE HistoryDate in (SELECT Max(HistoryDate)  FROM HistoryTable GROUP BY ReviewID )) Modi
ON crt.ReviewId = Modi.ReviewID
         ORDER BY crt.ReviewID 

嗨,在玩了几天剧本之后,这对我来说很有效

SELECT ModifiedDate, ModifiedBy, CreatedDate ,CreatedBy,  crt.ReviewID 
     FROM   (SELECT  HistoryDate  CreatedDate, ReviewId,   [User] CreatedBy FROM HistoryTable 
        WHERE HistoryDate in (SELECT min(HistoryDate)  FROM  HistoryTable GROUP BY ReviewID )) crt
INNER JOIN
    (SELECT HistoryDate  ModifiedDate, ReviewID, [User] ModifiedBy FROM  HistoryTable 
        WHERE HistoryDate in (SELECT Max(HistoryDate)  FROM HistoryTable GROUP BY ReviewID )) Modi
ON crt.ReviewId = Modi.ReviewID
         ORDER BY crt.ReviewID 

当两个评论的历史日期相同时,您希望发生什么?或者,是否要将所做的操作发布到表变量中?取决于ReviewId,它是与用户一起显示的最大值还是最小值。此操作的主要目的是为每个ReviewId显示Min Date和User作为CreatedDate和CreatedBy,以及MaxDate和User作为Last ModifiedDate和ModifiedBy,并忽略其余数据。当两个审阅具有相同的历史日期时,您希望发生什么?或者,是否要将所做的操作发布到表变量中?取决于ReviewId,它是与用户一起显示的最大值还是最小值。主要目的是为每个ReviewId显示Min Date和User作为CreatedDate和CreatedBy,以及MaxDate和User作为最新的ModifiedDate和ModifiedBy,并忽略其余数据。@SumanCha有错误吗?还是结果不正确?请多给点information@SumanCha如果您有解决方案,请回答您自己的问题并接受回答谢谢!仍在学习在stackoverflow上发布。我已经添加了解决方案。@SumanCha有错误吗?还是结果不正确?请多给点information@SumanCha如果您有解决方案,请回答您自己的问题并接受回答谢谢!仍在学习在stackoverflow上发布。我已经添加了解决方案。