开发者

SQL Server: Count based on date and two different times

OS - WindowsXP

SQL Server Management Studio 2008 R2

I am trying to get a count of the number of projects based on the release date, NOT date and TIME. However, some projects have the same release date but a different time a开发者_高级运维nd are treated as a separate project. As long as the project has the same date, I want it to be counted.

'Releasedate' on the server is a "datetime"

Select ProjectName, count(ProjectName) as Count, (Releasedate)
From DBTable Where Releasedate >= convert(nvarchar,(getdate())) 
Group by   projectname,releasedt

Current Results:

 ProjectName       Count        Releasedate

 Project_Nm_1      1             2010-03-27 00:00:00
 Project_Nm_1      1             2010-03-27 08:00:00
 Project_Nm_2      1             2010-03-27 00:00:00
 Project_Nm_2      1             2010-03-27 08:00:00

I would like to see:

 Project_Nm_1      2             2010-03-27
 Project_Nm_2      2             2010-03-27 


SQL Server 2008 introduced the new DATE datatype which does exactly what you're looking for - handle only the date, without any time. So just CAST your field to DATE and you should be fine:

SELECT 
   ProjectName, COUNT(ProjectName) as Count, CAST(Releasedate AS DATE)
FROM 
   dbo.DBTable 
WHERE 
   CAST(Releasedate AS DATE) >= CAST(GETDATE() AS DATE)
GROUP BY 
   projectname, CAST(ReleaseDate as DATE)


To group by date only, try using the CONVERT function:

GROUP BY projectname, CONVERT(nvarchar, Releasedate, 101)

You'll want to use the same CONVERT function call in the select column list so that query's output shows just the date, as well.

Take a look at: http://codingforums.com/showthread.php?t=56536


You can get the date portion of the ReleaseDate datetime using

DateAdd(dd, 0, DateDiff(dd, 0, ReleaseDate))

Therefore your query becomes

SELECT 
    ProjectName,
    Count(ProjectName) as Count,
    DateAdd(dd, 0, DateDiff(dd, 0, ReleaseDate)) as ReleaseDate
FROM
    DBTable
WHERE
    ReleaseDate >= getdate()
GROUP BY
    ProjectName,
    DateAdd(dd, 0, DateDiff(dd, 0, ReleaseDate))

If you find yourself stripping the time from datetimes frequently, then encapsulate it in a UDF.


Select 
    ProjectName, count(ProjectName) as CountProjects, Releasedate
From 
    DBTable 
Where 
    Releasedate >= convert(nvarchar, getdate()) 
Group by   
    projectname,releasedt
Order by 
    CountProjects desc

P.S. Don't use built-in functions while choosing alias of any column


You could simply GROUP BY the parts of the date you want using DATEPART

SELECT
    ProjectName,
    Count(*),
    DATEPART(year, Releasedate) as ReleaseYear,
    DATEPART(month, Releasedate) as ReleaseMonth,
    DATEPART(day, Releasedate) as ReleaseDay
FROM
    DBTable 
WHERE
    Releasedate >= convert(nvarchar,(getdate()))
GROUP BY
    ProjectName,
    DATEPART(year, Releasedate),
    DATEPART(month, Releasedate),
    DATEPART(day, Releasedate)

I'll leave combining those parts into one field as an exercise for you if you want, but this will ignore the time portion of Releasedate when grouping


To explain:

declare @dt datetime
set @dt = '2010/12/22 12:34:56'
print @dt
print convert(char(8), @dt, 112)

Result:

Dec 22 2010 12:34PM
20101222

So, use

GROUP BY convert(char(8), releasedt, 112)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜