すべての売上をリストし、日ごとに合計をグループ化します。
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)
またはより良い(ジョンブライトから):
GROUP BY date(datefield)
Oracleの場合:
GROUP BY to_char(datefield, 'yyyy-mm-dd')
以上(IronGoofyから):
GROUP BY trunc(created);
Informixの場合(ジョナサンレフラー):
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)
実際には、これは使用しているDBMSによって異なりますが、通常のSQLではconvert(varchar,DateColumn,101)
はDATETIME形式を日付(1日)に変更します
そう:
SELECT
sum(amount)
FROM
sales
GROUP BY
convert(varchar,created,101)
magix番号101
は、変換後の日付形式です
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
これらの計算フィールドは常に最新の状態に保たれ(「作成」日付が変更された場合)、テーブルの一部であり、通常のフィールドと同様に使用でき、インデックスを付けることもできます(「PERSISTED」の場合) )-完全に未使用の素晴らしい機能、私見。
マーク
Oracleの場合
group by trunc(created);
これにより、作成された日時が前の午前0時に切り捨てられます。
別のオプションは
group by to_char(created, 'DD.MM.YYYY');
同じ結果が得られますが、型変換が必要なため、処理が遅くなる場合があります。
PostgreSQLの場合:
GROUP BY to_char(timestampfield, 'yyyy-mm-dd')
またはキャストを使用して:
GROUP BY timestampfield::date
速度が必要な場合は、2番目のオプションを使用してインデックスを追加します。
CREATE INDEX tablename_timestampfield_date_idx ON tablename(date(timestampfield));