SQL grouping by month and year

后端 未结 9 1657
旧时难觅i
旧时难觅i 2020-11-27 15:57

I\'m not sure what should I write in the following SQL query to show \'date\' column like this: \"month-year\" - \"9-2011\".

SELECT MONTH(date) + \'.\' + YE         


        
相关标签:
9条回答
  • 2020-11-27 16:18

    In postgresql I can write a similar query with a date-format function (to_char) and grouping just by date:

    SELECT to_char (datum, 'MM-YYYY') AS mjesec 
    FROM test 
    GROUP BY datum 
    ORDER BY datum;
    

    Such thing is surely possible with SQL-Server too, isn't it?

    0 讨论(0)
  • 2020-11-27 16:21
    Yet another alternative: 
    
    Select FORMAT(date,'MM.yy')
    ...
    ...
    group by FORMAT(date,'MM.yy')
    
    0 讨论(0)
  • 2020-11-27 16:21

    If you want to stay having the field in datetime datatype, try using this:

    SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, o.[date]), 0) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada 
    FROM [Order] o
    WHERE (idCustomer = 1) AND (o.[date] BETWEEN '2001-11-3' AND '2011-11-3')
    GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, o.[date]), 0)
    

    It it also easy to change to group by hours, days, weeks, years...
    I hope it is of use to someone,

    Regards!

    0 讨论(0)
  • 2020-11-27 16:22

    If I understand correctly. In order to group your results as requested, your Group By clause needs to have the same expression as your select statement.

    GROUP BY MONTH(date) + '.' + YEAR(date)
    

    To display the date as "month-date" format change the '.' to '-' The full syntax would be something like this.

    SELECT MONTH(date) + '-' + YEAR(date) AS Mjesec, SUM(marketingExpense) AS
    SumaMarketing, SUM(revenue) AS SumaZarada 
    FROM [Order]
    WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3')
    GROUP BY MONTH(date) + '.' + YEAR(date)
    
    0 讨论(0)
  • 2020-11-27 16:24

    I guess is MS SQL as it looks like MS SQL syntax.

    So you should put in the group line the same thing as in select ex:

    Select MONTH(date)+'-'+YEAR(date), ....
    ...
    ...
    ...
    group by MONTH(date)+'-'+YEAR(date)
    
    0 讨论(0)
  • 2020-11-27 16:25
    SELECT CAST(MONTH(date) AS VARCHAR(2)) + '-' + CAST(YEAR(date) AS VARCHAR(4)) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada 
    FROM [Order]
    WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3')
    GROUP BY CAST(MONTH(date) AS VARCHAR(2)) + '-' + CAST(YEAR(date) AS VARCHAR(4))
    

    Or as @40-Love mentioned you can cast with leading zeroes:

    GROUP BY 
      CAST(YEAR(date) AS VARCHAR(4)) + '-' + right('00' + CAST(MONTH(date) AS VARCHAR(2)), 2) 
    
    0 讨论(0)
提交回复
热议问题