2010-12-10 79 views
2

OS - Windows XPSQL Server: Count basé sur la date et deux fois différents

SQL Server Management Studio 2008 R2

Je suis en train d'obtenir un décompte du nombre de projets en fonction de la date de sortie, pas date et l'heure. Cependant, certains projets ont la même date de sortie mais une heure différente et sont traités comme un projet distinct. Tant que le projet a la même date, je veux qu'il soit compté.

'Sortie le' sur le serveur est un "datetime"

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

Résultats actuels:

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 

Je voudrais voir:

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

Répondre

0

Vous pouvez obtenir la partie date du datetime ReleaseDate en utilisant

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

Par conséquent, votre requête devient

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)) 

Si vous vous trouvez décaper la temps de datetimes fréquemment, puis encapsuler dans un UDF.

+0

Merci pour votre aide avec cela. Ian avait la réponse que je cherchais. Daniel, je chercherai à combiner les "DATEPART" en une seule date. –

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

post-scriptum Ne pas utiliser les fonctions intégrées tout en choisissant alias d'une colonne

+1

Si vous code postal ou XML, ** s'il vous plaît ** salut Mettez ces lignes en surbrillance dans l'éditeur de texte et cliquez sur le bouton "code" (101 010) dans la barre d'outils de l'éditeur pour bien le mettre en forme et la mettre en surbrillance! –

0

Vous pouvez simplement GROUP BY les parties de la date souhaitée à l'aide 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) 

Je vais laisser la combinaison de ces parties dans un champ en tant exercice pour vous si vous voulez, mais cela ne tient pas compte de la partie de temps de Releasedate lors du regroupement

1

pour groupe par date uniquement, essayez d'utiliser la fonction CONVERT:

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

Vous devez utiliser le même appel de fonction CONVERT dans la liste des colonnes de sélection afin que la sortie de la requête affiche également la date.

Jetez un oeil à: http://codingforums.com/showthread.php?t=56536

+1

pourquoi convertir en un NVARCHAR ?? Juste CAST à une date et vous avez terminé ..... –

3

SQL Server 2008 a introduit le nouveau DATE type de données qui fait exactement ce que vous recherchez - gérer uniquement la date, sans aucun délai.Il suffit donc CAST votre champ DATE et vous devriez être bien:

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) 
0

Pour expliquer:

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

Résultat:

Dec 22 2010 12:34PM 
20101222 

, utilisez

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