sql >> データベース >  >> RDS >> Sqlserver

SQL関数に日付を追加

    質問を解決する最も簡単な方法は、クエリごとにグループで ROLLUP を使用することです (http://technet.microsoft.com/en-us/library/bb522495(v=sql.105).aspx )

    これが SQL Fiddle (http://sqlfiddle.com/#!3/3ce09/19 )

    日付の定義:

    create table test (
        Id  INT IDENTITY(1,1),
        date  DateTime,
        balls  int );
    insert into test(date, balls) values('11/21/2013',  2);
    insert into test(date, balls) values('11/22/2013',  3);
    insert into test(date, balls) values('11/23/2013',  4);
    insert into test(date, balls) values('11/24/2013',  5);
    insert into test(date, balls) values('11/25/2013',  2);
    insert into test(date, balls) values('11/26/2013',  5);
    insert into test(date, balls) values('11/27/2013',  4);
    insert into test(date, balls) values('11/28/2013',  3);
    insert into test(date, balls) values('11/29/2013',  9);
    insert into test(date, balls) values('11/30/2013',  8);
    insert into test(date, balls) values('12/01/2013',  7);
    insert into test(date, balls) values('12/02/2013',  4);
    insert into test(date, balls) values('12/03/2013',  5);
    insert into test(date, balls) values('12/04/2013',  6);
    insert into test(date, balls) values('12/05/2013',  2);
    insert into test(date, balls) values('12/06/2013',  0);
    insert into test(date, balls) values('12/07/2013',  1);
      

    実際のクエリ:

    select 
      label, 
      balls 
      from ( 
         SELECT  
           (DATEDIFF(d , '11/21/2013' , date) / 7) as week, 
           ((DATEDIFF(d , '11/21/2013' , date) / 7) + 1) as week1, 
           LEFT(CONVERT(VARCHAR, (DateAdd(d, (DATEDIFF(d , '11/21/2013' , date) / 7)*7, '11/21/2013')), 120), 10) +    ' - ' +  
           LEFT(CONVERT(VARCHAR, (DateAdd(d, ((DATEDIFF(d , '11/21/2013' , date) / 7) + 1)*7 - 1, '11/21/2013')), 120), 10) as label, 
           SUM(Balls) as balls 
          FROM test 
          GROUP BY rollup((DATEDIFF(d , '11/21/2013' , date) / 7))   
      ) as t 
      where t.label is not null
      

    結果:

    LABEL                       BALLS
    2013-11-21 - 2013-11-27     25
    2013-11-28 - 2013-12-04     42
    2013-12-05 - 2013-12-11     3
      

    1. 2つの日付の間に空であっても空の行を生成する

    2. mysqlの一意の番号の生成

    3. MySQLdbをインポートできません-python-Windows8.1

    4. 階層カテゴリツリーでノードとそのアンカーのすべての兄弟を見つけるにはどうすればよいですか?