Je veux lister toutes les ventes et regrouper la somme par jour.
Sales (saleID INT, amount INT, created DATETIME)
Mise à jour J'utilise SQL Server 2005
Je veux lister toutes les ventes et regrouper la somme par jour.
Sales (saleID INT, amount INT, created DATETIME)
Mise à jour J'utilise SQL Server 2005
Réponses:
si vous utilisez SQL Server,
dateadd(DAY,0, datediff(day,0, created))
retournera le jour créépar exemple, si la vente a été créée le '2009-11-02 06: 12: 55.000',
dateadd(DAY,0, datediff(day,0, created))
renvoyez '2009-11-02 00: 00: 00.000'la source
Pour SQL Server:
ou plus rapide (depuis Q8-Coder):
Pour MySQL:
ou mieux (de Jon Bright):
Pour Oracle:
ou plus rapide (à partir d'IronGoofy):
Pour Informix (par Jonathan Leffler):
la source
Si vous utilisez MySQL:
Si vous utilisez MS SQL 2008:
la source
en fait, cela dépend du SGBD que vous utilisez, mais en SQL normal
convert(varchar,DateColumn,101)
, le format DATETIME sera modifié à ce jour (un jour)alors:
le nombre magix
101
est le format de date dans lequel il est convertila source
Si vous utilisez SQL Server, vous pouvez ajouter trois champs calculés à votre table:
et maintenant vous pouvez facilement regrouper, classer par etc. par jour, mois ou année de la vente:
Ces champs calculés seront toujours tenus à jour (lorsque votre date "Créé" change), ils font partie de votre table, ils peuvent être utilisés comme des champs normaux, et peuvent même être indexés (s'ils sont "PERSISTÉS" ) - excellente fonctionnalité qui est totalement sous-utilisée, à mon humble avis.
Marc
la source
Pour oracle, vous pouvez
car cela tronque le datetime créé à minuit précédent.
Une autre option consiste à
qui permet d'obtenir le même résultat, mais peut être plus lent car il nécessite une conversion de type.
la source
Pour PostgreSQL:
ou en utilisant cast:
si vous voulez de la vitesse, utilisez la deuxième option et ajoutez un index:
la source
utiliser linq
la source