복붙노트

[SQL] 하루 그룹에 SQL 쿼리

SQL

하루 그룹에 SQL 쿼리

나는 모든 판매 및 그룹 하루 합을 나열합니다.

Sales (saleID INT, amount INT, created DATETIME)

최신 정보 나는 2005 SQL 서버를 사용하고

해결법

  1. ==============================

    1.SQL Server를 사용하는 경우,

    SQL Server를 사용하는 경우,

    DATEADD (DAY, 0, DATEDIFF (일, 0) 생성) 날 돌아갑니다 생성

    예를 들어, 판매는 '55.000 : 12 06 2009-11-02'에 생성 DATEADD (DAY, 0, DATEDIFF (일, 영, 창조)) 반환 '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))
    
  2. ==============================

    2.SQL Server의 경우 :

    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)
    

    또는 (존 브라이트에서) 더 나은 :

    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)
    
  3. ==============================

    3.당신이 MySQL을 사용하는 경우 :

    당신이 MySQL을 사용하는 경우 :

    SELECT
        DATE(created) AS saledate,
        SUM(amount)
    FROM
        Sales
    GROUP BY
        saledate
    

    당신은 2008 년 MS SQL을 사용하는 경우 :

    SELECT
        CAST(created AS date) AS saledate,
        SUM(amount)
    FROM
        Sales
    GROUP BY
        CAST(created AS date)
    
  4. ==============================

    4.실제로이 사용되지만 일반 SQL 변환 (VARCHAR, DateColumn, 101)에 현재까지 DATETIME 형식을 변경합니다 DBMS에 따라 달라집니다 (한 일)

    실제로이 사용되지만 일반 SQL 변환 (VARCHAR, DateColumn, 101)에 현재까지 DATETIME 형식을 변경합니다 DBMS에 따라 달라집니다 (한 일)

    그래서:

    SELECT 
        sum(amount) 
    FROM 
        sales 
    GROUP BY 
        convert(varchar,created,101)
    

    마법의 번호 (101)는 변환 어떤 날짜 형식입니다

  5. ==============================

    5.SQL Server를 사용하는 경우, 당신은 당신의 테이블에 세 계산 필드를 추가 할 수 있습니다 :

    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" ) - 완전히 사용 미만의 위대한 기능, 이럴.

    즙을 짜고 난 찌꺼기

  6. ==============================

    6.Oracle의 경우 다음을 수행 할 수 있습니다

    Oracle의 경우 다음을 수행 할 수 있습니다

    group by trunc(created);
    

    이 자릅니다로 이전 자정에 날짜를 만들었습니다.

    또 다른 옵션이다

    group by to_char(created, 'DD.MM.YYYY');
    

    이는 동일한 결과를 얻을 수 있지만,이 형식 변환을 필요로 느릴 수있다.

  7. ==============================

    7.PostgreSQL의 경우 :

    PostgreSQL의 경우 :

    GROUP BY to_char(timestampfield, 'yyyy-mm-dd')
    

    또는 캐스트를 사용하여 :

    GROUP BY timestampfield::date
    

    당신이 속도를 원하는 경우, 두 번째 옵션을 사용하여 인덱스를 추가 :

    CREATE INDEX tablename_timestampfield_date_idx ON  tablename(date(timestampfield));
    
  8. ==============================

    8.사용 LINQ

    사용 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)
    }
    
  9. from https://stackoverflow.com/questions/1658340/sql-query-to-group-by-day by cc-by-sa and MIT license