2015-11-03 85 views
-2

需要弄清楚我在SELECT语句中获得多天。 它可以工作,如果我只选择2列(Zip_code和Week)。获取天气数据的每周平均数

Zip_Code Week 
501 2014-12-29 to 2015-01-04 
501 2015-01-05 to 2015-01-11 
501 2015-01-12 to 2015-01-18 
501 2015-01-19 to 2015-01-25 
501 2015-01-26 to 2015-02-01 
501 2015-02-02 to 2015-02-08 
501 2015-02-09 to 2015-02-15 
501 2015-02-16 to 2015-02-22 
501 2015-02-23 to 2015-03-01 

代码:

SELECT DISTINCT Zip_Code = postal_code  --RIGHT(REPLICATE('0', 5) + CAST(postal_code AS VARCHAR(5)), 5) 
     ,[Week]    = CASE DATEPART(dw, Local_date) 
    WHEN 1 THEN CONVERT(char(10), DATEADD(DD, -6, Local_date),126) + ' to ' + CONVERT(char(10), Local_date,126) 
    WHEN 2 THEN CONVERT(char(10), Local_date,126) + ' to ' + CONVERT(char(10), DATEADD(DD, 6, Local_date),126) 
    WHEN 3 THEN CONVERT(char(10), DATEADD(DD, -1, Local_date),126) + ' to ' + CONVERT(char(10), DATEADD(DD, 5, Local_date),126) 
    WHEN 4 THEN CONVERT(char(10), DATEADD(DD, -2, Local_date),126) + ' to ' + CONVERT(char(10), DATEADD(DD, 4, Local_date),126) 
    WHEN 5 THEN CONVERT(char(10), DATEADD(DD, -3, Local_date),126) + ' to ' + CONVERT(char(10), DATEADD(DD, 3, Local_date),126) 
    WHEN 6 THEN CONVERT(char(10), DATEADD(DD, -4, Local_date),126) + ' to ' + CONVERT(char(10), DATEADD(DD, 2, Local_date),126) 
    WHEN 7 THEN CONVERT(char(10), DATEADD(DD, -5, Local_date),126) + ' to ' + CONVERT(char(10), DATEADD(DD, 1, Local_date),126) 
    ELSE 'UNK' 
           END 
    ,[Week_Avg_Temp_F]  = ROUND(AVG(CAST(tempAvg_F AS FLOAT)),2) 
     ,[Week_Max_Temp_F]  = ROUND(AVG(CAST(tempMax_F AS FLOAT)),2) 
     ,[Week_Min_Temp_F]  = ROUND(AVG(CAST(tempMin_F AS FLOAT)),2) 
     ,[Hum_Avg_%]    = ROUND(AVG(CAST([relHumAvg_%] AS FLOAT)),2) 
     ,[Hum_Min_%]    = ROUND(AVG(CAST([relHumMin_%] AS FLOAT)),2) 
     ,[precip_Inches]   = ROUND(AVG(CAST(precip_In AS FLOAT)),2) 
     ,[snowfall_Inches]  = ROUND(AVG(CAST(snowfall_In AS FLOAT)),2) 
     ,[Avg_Wind_Speed_MPH]  = ROUND(AVG(CAST(windSpdAvg_MPH AS FLOAT)),2) 
FROM [Weather_Data].[dbo].[Weather_Data_2015] 
GROUP BY postal_code, Local_date 
ORDER BY zip_code, Week 

如果我选择所有列,我得到了同样的邮政编码天的多个条目。

Zip_Code Week Week_Avg_Temp_F Week_Max_Temp_F Week_Min_Temp_F Hum_Avg_% Hum_Min_% precip_Inches snowfall_Inches Avg_Wind_Speed_MPH 
501 2014-12-29 to 2015-01-04 47 50 41 98 77 0 0 7 
501 2014-12-29 to 2015-01-04 36 46 27 82 59 1 0 7 
501 2014-12-29 to 2015-01-04 36 42 31 54 42 0 0 7 
501 2014-12-29 to 2015-01-04 33 38 25 48 38 0 0 10 
501 2015-01-05 to 2015-01-11 18 24 9 58 37 0 0 13 
501 2015-01-05 to 2015-01-11 26 33 18 62 49 0 1 10 
501 2015-01-05 to 2015-01-11 14 20 5 55 42 0 0 8 
501 2015-01-05 to 2015-01-11 16 22 11 55 44 0 0 6 
501 2015-01-05 to 2015-01-11 24 34 11 61 38 0 0 5 
501 2015-01-05 to 2015-01-11 19 22 17 70 44 0 0 5 
501 2015-01-05 to 2015-01-11 34 47 20 48 34 0 0 13 
501 2015-01-12 to 2015-01-18 25 29 18 82 74 0 0 7 
501 2015-01-12 to 2015-01-18 33 35 30 87 65 0 0 3 
501 2015-01-12 to 2015-01-18 35 45 17 96 87 1 0 5 
501 2015-01-12 to 2015-01-18 25 32 20 78 58 0 0 4 
501 2015-01-12 to 2015-01-18 21 27 14 62 38 0 0 4 
501 2015-01-12 to 2015-01-18 26 34 17 68 50 0 0 7 
501 2015-01-12 to 2015-01-18 28 39 19 58 40 0 0 8 

有什么建议?

+0

你的帖子是非常难以密码,你可以请格式考虑和使用代码块转义通过在每行代码前添加4个空格。编辑时,帮助你会容易得多。 –

+0

感谢您的编辑。什么是对帖子进行格式化的最佳方式? – user5495350

+0

我发现这与Round AVG Cast语句有关。平均每天,所以他们有7个条目。 – user5495350

回答

0

您需要通过移动你的组成的外层,因为现在它的引用LOCAL_DATE,所以还是分手了由day..I记录没有测试过这一点,但它应该工作

 SELECT Zip_Code, [WeekFrom], [WeekTo], 
     [Week_Avg_Temp_F]  = ROUND(AVG(CAST(tempAvg_F AS FLOAT)),2) 
     ,[Week_Max_Temp_F]  = ROUND(AVG(CAST(tempMax_F AS FLOAT)),2) 
     ,[Week_Min_Temp_F]  = ROUND(AVG(CAST(tempMin_F AS FLOAT)),2) 
     ,[Hum_Avg_%]    = ROUND(AVG(CAST([relHumAvg_%] AS FLOAT)),2) 
     ,[Hum_Min_%]    = ROUND(AVG(CAST([relHumMin_%] AS FLOAT)),2) 
     ,[precip_Inches]   = ROUND(AVG(CAST(precip_In AS FLOAT)),2) 
     ,[snowfall_Inches]  = ROUND(AVG(CAST(snowfall_In AS FLOAT)),2) 
     ,[Avg_Wind_Speed_MPH]  = ROUND(AVG(CAST(windSpdAvg_MPH AS FLOAT)),2) 
FROM 
(SELECT DISTINCT Zip_Code = postal_code  --RIGHT(REPLICATE('0', 5) + CAST(postal_code AS VARCHAR(5)), 5) 
     ,[WeekFrom]    = CASE DATEPART(dw, Local_date) 
    WHEN 1 THEN DATEADD(DD, -6, Local_date) 
    WHEN 2 THEN Local_date 
    WHEN 3 THEN DATEADD(DD, -1, Local_date) 
    WHEN 4 THEN DATEADD(DD, -2, Local_date) 
    WHEN 5 THEN DATEADD(DD, -3, Local_date) 
    WHEN 6 THEN DATEADD(DD, -4, Local_date) 
    WHEN 7 THEN DATEADD(DD, -5, Local_date) 
    ELSE 'UNK' END 
    ,[WeekTo]    = CASE DATEPART(dw, Local_date) 
    WHEN 1 THEN Local_date 
    WHEN 2 THEN DATEADD(DD, 6, Local_date) 
    WHEN 3 THEN DATEADD(DD, 5, Local_date) 
    WHEN 4 THEN DATEADD(DD, 4, Local_date) 
    WHEN 5 THEN DATEADD(DD, 3, Local_date) 
    WHEN 6 THEN DATEADD(DD, 2, Local_date) 
    WHEN 7 THEN DATEADD(DD, 1, Local_date) 
    ELSE 'UNK' END 
    ,tempAvg_F 
     ,tempMax_F 
     ,tempMin_F 
     ,[relHumAvg_%] 
     ,[relHumMin_%] 
     ,precip_In 
     ,snowfall_In 
     ,windSpdAvg_MPH 
FROM [Weather_Data].[dbo].[Weather_Data_2015]) AS WeeklyNumbers 
GROUP BY zip_code, [WeekFrom], [WeekTo] 
ORDER BY zip_code, [WeekFrom], [WeekTo] 
+0

看了,但还没有看到如何将本地日期分成2列而不是迄今为止的日期。 – user5495350

+0

已将日期更新为两列,删除了文字转换 – neuralgroove