【问题标题】:Sql how to get MAX and MIN Historydata along with corresponding userSql如何获取MAX和MIN Historydata以及相应的用户
【发布时间】:2018-03-13 01:23:00
【问题描述】:

我有这张带有 HistoryDate 和 User 的表。我需要像这样查询每个 ReviewID 的 Max(Historydate)、User 对应 Maxdate、Min(HistoryDate)、MinDate 对应的 User

   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

我可以使用表变量查询它,但想知道有什么其他方法可以得到它。

【问题讨论】:

  • 当两条评论的历史日期相同时,您希望发生什么?还是您想发布您所做的以将其放入表变量中?
  • 取决于 ReviewId 是与用户一起显示的最大值还是最小值。这样做的主要目的是将每个 ReviewId 的 Min Date 和 User 显示为 CreatedDate 和 CreatedBy 以及 MaxDate 和 User 作为 Latest ModifiedDate 和 ModifiedBy 并忽略其余数据。

标签: sql max min


【解决方案1】:

尝试在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
)

【讨论】:

  • @SumanCha 有错误吗?还是结果不正确?请提供更多信息
  • @SumanCha 如果您有解决方案,请回答您自己的问题并接受答案
  • 谢谢!还在学习在stackoverflow上发帖。我已经添加了解决方案。
【解决方案2】:

您好,在玩了几天脚本后,这对我有用。

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 

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 2015-04-14
    • 2018-10-01
    • 2017-09-09
    • 2017-06-10
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多