按月和年分组

时间:2019-08-19 21:01:59

标签: sql presto

我正在尝试按月份和年份分组的实例。

SELECT 
    (MONTH(CAST(t1.some_date as DATE)) + ' ' + YEAR(CAST(t1.some_date as DATE))) as Issue_Month,
    COUNT(*) as c
FROM
    (sub query) t1
GROUP BY 
    (MONTH(CAST(t1.some_date as DATE)) + ' ' + YEAR(CAST(t1.some_date as DATE)))
  

错误第2行:“ +”不能应用于bigint,varchar(1)

我尝试将+&交换为||Month Year | c 来构建所需的字符串,但是没有运气。


我如何生成如下表:

Month  |  Year  |  c

我也如何生成此表:


fs := http.FileServer(http.Dir(docRoot)) // docRoot is a config variable
for _, f := range files {
    path := fmt.Sprintf("/%s", f.Name())
    serveFile := func(w http.ResponseWriter, r *http.Request) {
        if r.URL.Path == path || r.URL.Path == "/index.html" && path == "/" {
            fs.ServeHTTP(w, r)
        } else {
            origHandler.ServeHTTP(w, r)
        }
    }
    docHandler.HandleFunc(path, serveFile)
}

3 个答案:

答案 0 :(得分:2)

您可以使用date_format()

SELECT 
    date_format(CAST(t1.some_date as DATE), '%m %Y') as Issue_Month,
    COUNT(*) as c
FROM
    (sub query) t1
GROUP BY 
    date_format(CAST(t1.some_date as DATE), '%m %Y')

答案 1 :(得分:0)

看起来这是使用month-year获取单个字段的一种方法。当然,这不是实现此目标的最佳方法

CONCAT(CAST(MONTH(CAST(t1.some_date as DATE)) as Varchar(2))  , '-' , CAST(YEAR(CAST(t1.some_date as DATE)) as  Varchar(4))) as Issue_Month,

答案 2 :(得分:0)

您可以尝试这样的事情:

SELECT 
    (MONTH(CAST(t1.some_date as DATE)) + ' ' + YEAR(CAST(t1.some_date as DATE))) as Issue_Month,
    COUNT(*) as c
FROM
    (sub query) t1
GROUP BY 
    (MONTH(CAST(t1.some_date as DATE)), YEAR(CAST(t1.some_date as DATE)))

分组子句不需要bla + bla。您可以按原样包含它们。 顺便说一句,因为您没有使用任何其他表格作为月份的基础,所以您只会得到月份中包含Issue的月份。为了解决这个问题,您可以使用另一个表,该表保留每个月的所有月份以及您想要拥有的所有数据(其中的天数,简写形式,年度季度,节假日等),并将Issue_Month保留到该表中,和GROUP BY主要月份表。

相关问题