모든 판매를 나열하고 합계를 일별로 그룹화하고 싶습니다.
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- 코더에서) :
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)
실제로 이것은 사용중인 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"인 경우). )-완전히 사용되지 않는 훌륭한 기능, IMHO.
마크