Sql按日期计数列并选择相应的日期

Sql按日期计数列并选择相应的日期,sql,sql-server-2005,Sql,Sql Server 2005,我读了berfore,但这些并没有指出我的问题 我有以下表格记录(表格只有两列) 我想显示如下内容: | VALUE | COUNT | NEWTIME | -------------------------------- | test | 2 |04.05.2012| | test2 | 1 |04.05.2012| | test2 | 1 |05.05.2012| | test3 | 1 |06.05.2012|

我读了berfore,但这些并没有指出我的问题

我有以下表格记录(表格只有两列)

我想显示如下内容:

| VALUE   | COUNT   | NEWTIME  |
--------------------------------
| test    | 2       |04.05.2012|
| test2   | 1       |04.05.2012|
| test2   | 1       |05.05.2012|
| test3   | 1       |06.05.2012|
我将
作为
时间
的日期部分来计算
,如:

select datepart(d, TIME), count(VALUE) from table1
group by datepart(d, TIME)
如何获得附加的
NEWTIME
列?在SQLServer2005中是否可能

多谢各位

select VALUE, count(VALUE), datepart(d, MIN(TIME)) AS NEWTIME
from table1
group by datepart(d, TIME)

您可以使用
MIN
MAX
聚合函数。在您的情况下,这不重要,因为您正在通过
datepart

进行全天分组,但我会这样做

select VALUE, count(*) AS COUNT, convert(date, max(TIME)) AS NEWTIME --max , min whatever 
from table1
group by VALUE, datepart(d, TIME) --dont know why you group by timne not value 

您可以像这样添加它和格式化它,但您还必须按它分组

select value, datepart(d, TIME), count(VALUE), datepart(mmonth, time) + '.' + datepart(day, time) + '.' + datepart(year, time) as newtime
from table1
group by datepart(d, TIME, newtime) 
如果你不在乎用句号作为分隔符,那么做起来就容易一点

select value, datepart(d, TIME), count(VALUE), convert(varchar, time, 101) as newtime
from table1
group by datepart(d, TIME, newtime) 
我还注意到您的输出中有重复项,我个人会这样做:

select value, count(*) as cnt, convert(varchar, time, 101) as newtime
from table1
group by value, newtime

我真的不明白你的问题,但如果我理解正确,你想从时间列按短日期分组数据吗?如果是,结果是:

select max(VALUE) as VALUE, count(VALUE) as count, CONVERT(VARCHAR(10), TIME , 104) as newtime
from table1
group by CONVERT(VARCHAR(10), TIME , 104)

如果不按值分组,我不明白为什么要显示这些值。

我不完全理解
newtime
的含义,但您可以尝试在
count(…)之后添加
max(datepart(d,DATE))
datepart(d,TIME)
返回月份的日期。这真的是你想要的吗?它将
2012-05-07
2012-06-07
分组。是的,你说得对……也许我必须按天+月+年分组。如何按年+月+天分组更好?请告诉我如何保持小时、分钟和秒不变?因为如果我使用
dateadd(day,datediff(day,0,TIME),0)
那么时间是00:00:00。我想离开他们intact@MichaelSwan-结果中不能有时间部分,也不能只有日期上的同一时间组。如果可能,则为每小时或每小时minutes@MichaelSwan您可以为组成组的其中一行设置时间部分。例如
min(时间)
max(时间)
。如果你仔细想想,你会发现,如果一天中的一组人是由许多行组成的,这些行有不同的时间部分,那么你必须选择你想要在这一行上的时间。
select value, count(*) as cnt, convert(varchar, time, 101) as newtime
from table1
group by value, newtime
select max(VALUE) as VALUE, count(VALUE) as count, CONVERT(VARCHAR(10), TIME , 104) as newtime
from table1
group by CONVERT(VARCHAR(10), TIME , 104)