J'ai une requête qui s'exécute et je voudrais returnner les loggings où la date est supérieure ou égale à une date particulière. La colonne sur laquelle j'interroge est le format datetime.
SELECT COUNT(RSO_ParentID), AssignedDateTime FROM Task WHERE OwnerTeam='2nd Line Support' AND AssignedDateTime>='2015-09-01 00:00:00.000' GROUP BY AssignedDateTime
Y a-t-il un moyen d'avoir un filtrage sur la partie date de AssignedDateTime, et une search par rapport à la date actuelle (c'est-à-dire la search des 7 derniers jours)?
Merci, Matt
Vous pourriez le faire comme ça dans MSSQL
SELECT COUNT(RSO_ParentID), AssignedDateTime FROM Task WHERE OwnerTeam='2nd Line Support' AND AssignedDateTime>=DATEADD(D,-7, GETDATE()) GROUP BY AssignedDateTime
Remarque: Cette question n'a pas été étiquetée SQL Server 2005 lorsque je lui ai répondu. Je laisse la réponse, car il est approprié pour SQL Server 2008+.
Si vous vous souciez uniquement de la date et non de l'heure, vous avez besoin d'une combinaison de casting et de datediff()
:
SELECT COUNT(RSO_ParentID), AssignedDateTime FROM Task WHERE OwnerTeam = '2nd Line Support' AND AssignedDateTime >= dateadiff(day, -7, cast(getdate() as date)) GROUP BY AssignedDateTime;
Notez que vous pouvez également exprimer cela en utilisant des fonctions sur AssignedDateTime
. C'est généralement une mauvaise idée car cela empêche souvent l'utilisation d'index pour la requête.
Je devine aussi que vous voulez les résultats par jour:
SELECT COUNT(RSO_ParentID), cast(AssignedDateTime as date) FROM Task WHERE OwnerTeam = '2nd Line Support' AND AssignedDateTime >= dateadiff(day, -7, cast(getdate() as date)) GROUP BY cast(AssignedDateTime as date);
ou un total, dans lequel vous ne voulez pas une clause group by
:
SELECT COUNT(RSO_ParentID) FROM Task WHERE OwnerTeam = '2nd Line Support' AND AssignedDateTime >= dateadiff(day, -7, cast(getdate() as date));
Si vous utilisez MSSQL, utilisez DATEDIFF.
SELECT COUNT(RSO_ParentID), AssignedDateTime FROM Task WHERE OwnerTeam='2nd Line Support' AND DATEDIFF(DAY,AssignedDateTime,GETDATE()) <=7 GROUP BY AssignedDateTime
Essayez ceci, il va vérifier seulement la partie date, mais pas la partie time
SELECT COUNT(RSO_ParentID), AssignedDateTime FROM Task WHERE OwnerTeam='2nd Line Support' AND CAST(AssignedDateTime AS DATE) >= DATEADD(D,-7, GETDATE()) GROUP BY AssignedDateTime