2015-10-27 4 views
0

Мне было предложено создать среднее значение по времени в темпах ... и почтовым индексом. Таблица имеет 15 миллионов строк и хотела бы сжать ее всего за 52 недели за почтовые индексы 41K. Вот топ 10 строк:Еженедельное среднее количество строк в таблице

 
    postal_code Local_date tempAvg_F tempMax_F tempMin_F 
    1001  2015-07-14 74   83   65 
    1001  2015-07-15 74   84   63 
    1001  2015-07-16 67   78   57 
    1001  2015-07-17 70   82   54 
    1001  2015-07-18 73   82   67 
    1001  2015-07-19 80   91   71 
    1001  2015-07-20 81   92   71 
    1001  2015-07-21 76   90   67 
    1001  2015-07-22 73   83   59 
    1001  2015-07-23 71   83   56 

У меня есть взгляд через КТР, AVG и группы по, но интересно, если с помощью для каждого цикла будет лучше. Если кто-то может указать мне правильное направление.

JJ

ответ

1

но интересно, если с помощью для каждого цикла будет лучше

Loop/курсор в SQL мире в 95% случаев медленнее, чем набор решений на основе.

Вы можете использовать простой GROUP BY:

SELECT postal_code 
     ,[week]    = DATEPART(wk, Local_date) 
     ,[week_tempAvg_F]  = AVG(tempAvg_F) 
     ,[week_tempMax_F]  = AVG(tempMax_F) 
     ,[week_tempMin_F]  = AVG(tempMin_F) 
FROM #tab 
GROUP BY postal_code,DATEPART(wk, Local_date) 
ORDER BY postal_code, [week]; 

LiveDemo

Выход:

╔═════════════╦══════╦════════════════╦════════════════╦════════════════╗ 
║ postal_code ║ week ║ week_tempAvg_F ║ week_tempMax_F ║ week_tempMin_F ║ 
╠═════════════╬══════╬════════════════╬════════════════╬════════════════╣ 
║  1001 ║ 29 ║    71 ║    81 ║    61 ║ 
║  1001 ║ 30 ║    76 ║    87 ║    64 ║ 
╚═════════════╩══════╩════════════════╩════════════════╩════════════════╝ 
+0

Спасибо. Теперь давайте посмотрим, как долго работает. – user5495350

Смежные вопросы