2016-03-08 3 views
-1

У меня есть данные, хранящиеся в базе данных SQL Vertica структурированы следующим образом:Найти недельные пики ежедневных данных SQL

location date count 
Seattle  2015-09-21 48991 
Portland 2015-09-21 38396 
Seattle  2015-09-22 49639 
Portland 2015-09-22 28817 
Portland 2015-09-23 29183 
Seattle  2015-09-23 50210 
Portland 2015-09-24 29627 
Seattle  2015-09-24 50844 
Seattle  2015-09-25 56485 
Portland 2015-09-25 30076 
Portland 2015-09-26 30352 
Seattle  2015-09-26 52011 
Portland 2015-09-27 30491 
Seattle  2015-09-27 52291 

отсчет является ежедневным пиком. Я бы хотел, чтобы максимальная сумма была рассчитана на каждую неделю, поэтому я, по сути, получаю еженедельный пик.

location week_ending_date count 
Portland 2015-09-27 38396 
Seattle  2015-09-27 56485 

Любые предложения?

Спасибо!

+0

А как вы определяете в неделю? В какой день это начинается? Вы можете использовать ['DATEPART (WEEK, )' или 'DATEPART (ISOWEEK, )'] (https://my.vertica.com/docs/7.1.x/HTML/Content/Authoring/SQLReferenceManual/Functions/Date -Time/DATE_PART.htm), но в любом случае у вас будут проблемы с переносом на конец года. Если ни одна из этих функций не отвечает вашим потребностям, самым простым решением может быть создание вашей собственной таблицы календаря. –

+0

Пожалуйста, обновите свой вопрос с помощью SQL-кода у вас возникли проблемы с – Kermit

+0

@BaconBits, если он/она не может использовать ни «неделю» (начинается в воскресенье), либо 'week_iso' (начинается в понедельник), тогда функция' time_slice() 'aggregate будет Покажи фокус... – mauro

ответ

1

Предполагая, что ваша неделя начинается в понедельник ...

SQL> select * from wtest order by dt ; 
location |  dt  | count 
----------+------------+------- 
Seattle | 2015-09-21 | 48991 
Portland | 2015-09-21 | 38396 
Portland | 2015-09-22 | 28817 
Seattle | 2015-09-22 | 49639 
Portland | 2015-09-23 | 29183 
Seattle | 2015-09-23 | 50210 
Portland | 2015-09-24 | 29627 
Seattle | 2015-09-24 | 50844 
Portland | 2015-09-25 | 30076 
Seattle | 2015-09-25 | 56485 
Portland | 2015-09-26 | 30352 
Seattle | 2015-09-26 | 52011 
Portland | 2015-09-27 | 30491 
Seattle | 2015-09-27 | 52291 

SQL> select 
     location, 
     min(dt) + 6 as week_ending_date, 
     max(count) as count 
    from 
     wtest 
    group by location, year_iso(dt), week_iso(dt) ; 

location | week_ending_date | count 
----------+------------------+------- 
Portland | 2015-09-27  | 38396 
Seattle | 2015-09-27  | 56485 
Смежные вопросы