从一列中选择最小日期、最大日期并按天分组 - SQL

9

我马上就要疯了,请帮忙。

我有一个包含datetime值的列。

我需要找到每天的最小值和最大值。

数据看起来像这样:

2012-11-23 05:49:26.000  
2012-11-23 07:55:43.000  
2012-11-23 13:59:56.000  
2012-11-26 07:51:13.000  
2012-11-26 10:23:31.000  
2012-11-26 10:25:09.000  
2012-11-26 16:22:22.000  
2012-11-27 07:30:03.000  
2012-11-27 08:53:47.000  
2012-11-27 10:40:55.000  

这是我迄今为止尝试的:

select distinct(convert(nvarchar, datum, 112)), min(datum), max(datum) 
from myTable

但是当我

Group by

我将所有列分组...

我似乎不能将我的第一个选择设置为ColName并在其上进行分组。

这就是我想要的。

20121123 | 2012-11-23 05:49:26.000 | 2012-11-23 13:59:56.000  
20121126 | 2012-11-26 07:51:13.000 | 2012-11-26 16:22:22.000  
20121127 | 2012-11-27 07:30:03.000 | 2012-11-27 10:40:55.000  

2012年11月23日05:49:26是所有11月23日日期的最小值,就像10:40:55是所有11月27日日期的最大值一样。您正在获得您所要求的每个“天”集合中的最小/最大时间戳。 - Marc B
1
SQL Server 的哪个版本? - Martin Smith
1
@MarcB 那是期望的结果,而不是他们实际实现的结果。 - Martin Smith
2个回答

13

同时将 GROUP BY 中的列进行转换。

select
  min(datum), max(datum), CONVERT(varchar(8), datum, 112)
from
  dateTable
group by 
  CONVERT(varchar(8), datum, 112)

这里有一个fiddle

这是日期转换值的列表。(在上面的例子中,我已经为您选择了112)


2

在SQL Server 2008+中,您可以使用date数据类型,而不是将其转换为字符字符串:

select cast(datum as date), min(datum), max(datum) 
from myTable
group by cast(datum as date);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接