すべての売上をリストし、合計を日ごとにグループ化したい。
Sales (saleID INT, amount INT, created DATETIME)
更新 私はSQL Server 2005を使用しています
すべての売上をリストし、合計を日ごとにグループ化したい。
Sales (saleID INT, amount INT, created DATETIME)
更新 私はSQL Server 2005を使用しています
回答:
SQL Serverを使用している場合、
dateadd(DAY,0, datediff(day,0, created))
作成された日を返します
たとえば、「2009-11-02 06:12:55.000」に作成されたセールの場合、
dateadd(DAY,0, datediff(day,0, created))
「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))
SQL Serverの場合:
GROUP BY datepart(year,datefield),
datepart(month,datefield),
datepart(day,datefield)
以上(Q8-Coderから):
GROUP BY dateadd(DAY,0, datediff(day,0, created))
MySQLの場合:
GROUP BY year(datefield), month(datefield), day(datefield)
以上(Jon Brightから):
GROUP BY date(datefield)
Oracleの場合:
GROUP BY to_char(datefield, 'yyyy-mm-dd')
以上(IronGoofyから):
GROUP BY trunc(created);
Informix(Jonathan Leffler)の場合:
GROUP BY date_column
GROUP BY EXTEND(datetime_column, YEAR TO DAY)
MySQLを使用している場合:
SELECT
DATE(created) AS saledate,
SUM(amount)
FROM
Sales
GROUP BY
saledate
MS SQL 2008を使用している場合:
SELECT
CAST(created AS date) AS saledate,
SUM(amount)
FROM
Sales
GROUP BY
CAST(created AS date)
SQL Serverを使用している場合は、次の3つの計算フィールドをテーブルに追加できます。
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
そして今、あなたは簡単にグループ化したり、セールの日、月、年ごとに注文したりできます:
SELECT SaleDay, SUM(Amount)
FROM dbo.Sales
GROUP BY SaleDay
これらの計算フィールドは常に最新の状態に保たれ(「作成」日が変更された場合)、それらはテーブルの一部であり、通常のフィールドと同じように使用でき、インデックスを作成することもできます(「永続化」されている場合) )-完全に活用されていない素晴らしい機能、IMHO。
マーク
PostgreSQLの場合:
GROUP BY to_char(timestampfield, 'yyyy-mm-dd')
またはキャストを使用して:
GROUP BY timestampfield::date
速度が必要な場合は、2番目のオプションを使用してインデックスを追加します。
CREATE INDEX tablename_timestampfield_date_idx ON tablename(date(timestampfield));
linqを使用する
from c in Customers
group c by DbFunctions.TruncateTime(c.CreateTime) into date
orderby date.Key descending
select new
{
Value = date.Count().ToString(),
Name = date.Key.ToString().Substring(0, 10)
}