2017-02-19 6 views
1

Мне нужен запрос для группировки совокупности в одной таблице по диапазонам дат в другой таблице.Группировка групп SQL по столбцам диапазона дат в другой таблице

Table 1 
weeknumber | weekyear | weekstart | weekend 
------------+----------+------------+------------ 
     18 |  2016 | 2016-02-01 | 2016-02-08 
     19 |  2016 | 2016-02-08 | 2016-02-15 
     20 |  2016 | 2016-02-15 | 2016-02-22 
     21 |  2016 | 2016-02-22 | 2016-02-29 
     22 |  2016 | 2016-02-29 | 2016-03-07 
     23 |  2016 | 2016-03-07 | 2016-03-14 
     24 |  2016 | 2016-03-14 | 2016-03-21 
     25 |  2016 | 2016-03-21 | 2016-03-28 
     26 |  2016 | 2016-03-28 | 2016-04-04 
     27 |  2016 | 2016-04-04 | 2016-04-11 
     28 |  2016 | 2016-04-11 | 2016-04-18 
     29 |  2016 | 2016-04-18 | 2016-04-25 
     30 |  2016 | 2016-04-25 | 2016-05-02 
     31 |  2016 | 2016-05-02 | 2016-05-09 
     32 |  2016 | 2016-05-09 | 2016-05-16 
     33 |  2016 | 2016-05-16 | 2016-05-23 
     34 |  2016 | 2016-05-23 | 2016-05-30 
     35 |  2016 | 2016-05-30 | 2016-06-06 
     36 |  2016 | 2016-06-06 | 2016-06-13 
     37 |  2016 | 2016-06-13 | 2016-06-20 
     38 |  2016 | 2016-06-20 | 2016-06-27 
     39 |  2016 | 2016-06-27 | 2016-07-04 
     40 |  2016 | 2016-07-04 | 2016-07-11 
     41 |  2016 | 2016-07-11 | 2016-07-18 
     42 |  2016 | 2016-07-18 | 2016-07-25 
     43 |  2016 | 2016-07-25 | 2016-08-01 
     44 |  2016 | 2016-08-01 | 2016-08-08 
     45 |  2016 | 2016-08-08 | 2016-08-15 
     46 |  2016 | 2016-08-15 | 2016-08-22 
     47 |  2016 | 2016-08-22 | 2016-08-29 
     48 |  2016 | 2016-08-29 | 2016-09-05 
     49 |  2016 | 2016-09-05 | 2016-09-12 
Table 2 
accountid | rdate | fee1 | fee2 | fee3 | fee4 
-----------+------------+------+------+------+------ 
    481164 | 2015-12-22 | 8 | 1 | 5 | 1 
    481164 | 2002-12-22 | 1 | 0 | 0 | 0 
    481166 | 2015-12-22 | 1 | 0 | 0 | 0 
    481166 | 2016-10-20 | 14 | 0 | 0 | 0 
    481166 | 2016-10-02 | 5 | 0 | 0 | 0 
    481166 | 2016-01-06 | 18 | 4 | 0 | 5 
    482136 | 2016-07-04 | 18 | 0 | 0 | 0 
    481164 | 2016-07-04 | 2 | 3 | 4 | 5 
    481164 | 2016-06-28 | 34 | 0 | 0 | 0 
    481166 | 2016-07-20 | 50 | 0 | 0 | 69 
    481166 | 2016-07-13 | 16 | 0 | 0 | 5 
    481166 | 2016-09-15 | 8 | 0 | 0 | 2 
    481166 | 2016-10-03 | 8 | 0 | 0 | 0 

мне нужно агрегировать fee1 + + Плата 2 Плата 3 + Плата 4 для rdates в каждом диапазоне дат (weekstart, выходные) в таблице 1, а затем с помощью группы ACCOUNTID. Что-то вроде этого:

accountid | weekstart | weekend | SUM 
-----------+------------+------------+------ 
    481164 | 2016-02-01 | 2016-02-08 | 69 
    481166 | 2016-02-01 | 2016-02-08 | 44 
    481164 | 2016-02-08 | 2016-02-15 | 22 
    481166 | 2016-02-08 | 2016-02-15 | 12 

ответ

2
select accountid, weekstart, weekend, 
     sum(fee1 + fee2 + fee3 + fee4) as total_fee 
from table2 
    inner join table1 on table2.rdate >= table1.weekstart and table2.rdate < table1.weekend 
group by accountid, weekstart, weekend; 

Просто вещь:

weeknumber | weekyear | weekstart | weekend 
------------+----------+------------+------------ 
     18 |  2016 | 2016-02-01 | 2016-02-08 
     19 |  2016 | 2016-02-08 | 2016-02-15 

выходные за неделю 18 должны быть 2016-02-07, потому 2016-02-08 это weekstart за неделю 19.

weeknumber | weekyear | weekstart | weekend 
------------+----------+------------+------------ 
     18 |  2016 | 2016-02-01 | 2016-02-07 
     19 |  2016 | 2016-02-08 | 2016-02-14 

Проверить его здесь: http://rextester.com/NCBO56250

+0

Спасибо так много для ответа! Однако функция datepart только извлекает календарную неделю с даты. Номера недель в таблице 1 нумеруются в соответствии с финансовым годом, начинающимся в октябре. Любые идеи для такого рода ситуации? –

+0

Muchisimo Gracias Senor! Он sido trabajando en este todo el dia! Gracias! –

+0

Я рад помочь. – McNets

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