SQL Server:查询分组并在结果中包含日期的最小值和最大值

时间:2019-07-04 18:19:53

标签: sql sql-server

我想知道是否有人可以帮助我解决我正在尝试编写的查询。我正在使用SQL Server语法。

我正在尝试按组对这些行进行分组,并且与该组关联的最小日期和最大日期也会显示在我的输出中。

很抱歉,没有提供代码。我只是真的无法提出任何建议。这超出了我对SQL的理解。也不介意是否也将解释或理论添加到解决方案中以供学习。

再次感谢任何可以帮助我的人。

这里是例子。

数据样本:

+----------------+-------------+-------------------+-----------------+ 
|      Name      |   Group     |    CheckInDate    |   CheckOutDate  |
+----------------+-------------+-------------------+-----------------+
|      Rogue     |   Group 1   |     01/03/2019    |   01/08/2019    |
+----------------+-------------+-------------------+-----------------+ 
|      Larry     |   Group 3   |     01/01/2019    |   01/07/2019    |
+----------------+-------------+-------------------+-----------------+
|      Jorge     |   Group 2   |     01/02/2019    |   01/04/2019    |
+----------------+-------------+-------------------+-----------------+ 
|      Tara      |   Group 1   |     01/02/2019    |   01/07/2019    |
+----------------+-------------+-------------------+-----------------+ 
|      Luca      |   Group 2   |     01/03/2019    |   01/08/2019    |
+----------------+-------------+-------------------+-----------------+  

查询输出

 +----------------+-----------------+-------------------+-----------------+
 |   Description  |      Count      |    CheckInDate    |   CheckOutDate  | 
 +----------------+-----------------+-------------------+-----------------+ 
 |     Group 1    |        2        |     01/02/2019    |    01/08/2019   |     
 +----------------+-----------------+-------------------+-----------------+
 |     Group 2    |        2        |     01/02/2019    |    01/08/2019   | 
 +----------------+-----------------+-------------------+-----------------+
 |     Group 3    |        1        |     01/01/2019    |    01/07/2019   |
 +----------------+-----------------+-------------------+-----------------+  

1 个答案:

答案 0 :(得分:1)

您需要group by组,并在日期列上进行minmax

SELECT
  Group AS Description, COUNT(*) AS Count,
  MIN(CheckInDate) AS CheckInDate,
  MAX(CheckOutDate) AS CheckOutDate
FROM Dates
GROUP BY Group;