Je veux énumérer toutes les ventes et regrouper la somme par jour.
Ventes (saleID INT, montant INT, créé DATETIME)
Mise à jour j'utilise SQL Server 2005
Je veux énumérer toutes les ventes et regrouper la somme par jour.
Ventes (saleID INT, montant INT, créé DATETIME)
Mise à jour j'utilise SQL Server 2005
si vous utilisez SQL Server,
dateadd(DAY,0, datediff(day,0, created))
retournera le jour créé
par exemple, si la vente créée le '2009-11-02 06: 12: 55.000', dateadd(DAY,0, datediff(day,0, created))
return '2009-11-02 00: 00: 00.000'
select sum(amount) as total, dateadd(DAY,0, datediff(day,0, created)) as created
from sales
group by dateadd(DAY,0, datediff(day,0, created))
Pour SQL Server:
GROUP BY datepart(year,datefield),
datepart(month,datefield),
datepart(day,datefield)
ou plus rapide (à partir de Q8-Coder):
GROUP BY dateadd(DAY,0, datediff(day,0, created))
Pour MySQL:
GROUP BY year(datefield), month(datefield), day(datefield)
ou mieux (de Jon Bright):
GROUP BY date(datefield)
Pour Oracle:
GROUP BY to_char(datefield, 'yyyy-mm-dd')
ou plus rapide (d'IronGoofy):
GROUP BY trunc(created);
Pour Informix (par Jonathan Leffler):
GROUP BY date_column
GROUP BY EXTEND(datetime_column, YEAR TO DAY)
Si vous utilisez SQL Server, vous pouvez ajouter trois champs calculés à votre table:
Sales (saleID INT, amount INT, created DATETIME)
ALTER TABLE dbo.Sales
ADD SaleYear AS YEAR(Created) PERSISTED
ALTER TABLE dbo.Sales
ADD SaleMonth AS MONTH(Created) PERSISTED
ALTER TABLE dbo.Sales
ADD SaleDay AS DAY(Created) PERSISTED
et maintenant vous pouvez facilement group by, order by, etc. par jour, du mois ou de l'année de la vente:
SELECT SaleDay, SUM(Amount)
FROM dbo.Sales
GROUP BY SaleDay
Ces champs calculés seront toujours mis à jour (lorsque votre "Créé" changement de date), ils font partie de votre table, ils peuvent être utilisés comme des champs, et peut même être indexé (si ils sont "PERSISTANTES") - une grande fonctionnalité qui est totalement sous-exploité, à mon humble avis.
Marc
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.