mrb*_*lah 117 sql sql-server group-by sql-server-2005
我想列出所有销售,并按天分组.
Sales (saleID INT, amount INT, created DATETIME)
更新 我正在使用SQL Server 2005
Anw*_*dra 146
如果您使用的是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))
And*_*mar 99
对于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)
Jon*_*ght 37
如果您使用的是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格式更改为日期(一天)
所以:
SELECT 
    sum(amount) 
FROM 
    sales 
GROUP BY 
    convert(varchar,created,101)
magix编号101是转换为的日期格式
如果您使用的是SQL Server,则可以向表中添加三个计算字段:
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") ) - 完全没有充分利用的伟大功能,恕我直言.
渣
对于 PostgreSQL:
GROUP BY to_char(timestampfield, 'yyyy-mm-dd')
或使用演员表:
GROUP BY timestampfield::date
如果您想要速度,请使用第二个选项并添加索引:
CREATE INDEX tablename_timestampfield_date_idx ON  tablename(date(timestampfield));
| 归档时间: | 
 | 
| 查看次数: | 157500 次 | 
| 最近记录: |