2017-05-11 83 views
0

我想为每天有数据的变量计算每个场所的月平均数。我的日期变量有一个数字格式“YYYYMMDD”。 我的数据是这样的:SQL:按月平均数

date  venue metric 
20150203 1  0.78 
20150204 1  0.65 
20150205 1  0.90 
20150206 1  0.40 
20150203 2  0.74 
20150204 2  0.77 
20150205 2  0.88 
20150206 2  0.64 
20150203 3  0.78 
20150204 3  0.92 
20150205 3  0.94 
20150206 3  0.60 
+0

哪种数据库类型? – maSTAShuFu

+0

将您的日期从数字转换为varchar(8)...日期函数应该能够识别年份月以及我的情况...否则应用文化/地区 – maSTAShuFu

+2

存储日期为相应的日期类型,而不是数字。 – Donnie

回答

1

你应该存储日期为日期不是数字,无论数据库。在任何情况下,类似于下面的东西应该在任何数据库工作:

select floor(date/100) as yyyymm, venue, avg(metric) 
from t 
group by floor(date/100), venue; 
1

假设你正在使用PostgreSQL:

SELECT 
    month, 
    venue, 
    AVG(metric) 
FROM (
    SELECT 
     EXTRACT(MONTH FROM TO_DATE(CAST(your_date_field AS TEXT), 'YYYYMMDD')) AS month, venue, metric 
    FROM 
     your_table 
    ) AS sub 
GROUP BY 
    month, venue; 
1

试试这个:

SELECT SUBSTRING(DATE, 5,2) AS MONTH, VENUE, AVG (METRIC) 
FROM TABLENAME 
GROUP BY SUBSTRING(DATE, 5,2), VENUE 

而且,我同意与你身边的每个人都应该存储日期作为日期值。

+0

对不起,它被保存为日期。我对SQL很陌生。无论如何,我试过“选择年份(日期),月份(日期),公制......”但出现错误:“错误:函数年(日期)不存在 LINE 1:SELECT year(date)as year,month(date)as month,market_id,... ^ 提示:没有函数会与给定的名称和参数类型匹配,您可能需要添加明确的类型转换 **********错误**********“ – duckman

+1

看看http://stackoverflow.com/questions/36869703/extract-month-from-date-field,看看是否可以帮助你从日期字段中提取月份。 – SandPiper