2017-02-19 4 views
1

Ich brauche eine Abfrage, um ein Aggregat in einer Tabelle nach Datumsbereichen in einer anderen Tabelle zu gruppieren.SQL-Gruppenaggregat nach Datumsbereich Spalten in einer anderen Tabelle

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 

benötigen I gebühr1 + Gebühr 2 + + fee3 Gebühr 4 für rdates in jedem Datumsbereich (weekstart, Wochenende) in Tabelle 1 und anschließend Gruppe von accountid zu aggregieren. Etwas wie folgt aus:

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 

Antwort

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; 

Nur eine Sache:

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

Wochenende für Woche 18 sollte 2016.02.07 sein, weil 2016.02.08 ist weekstart für Woche 19.

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

prüfen sie es hier: http://rextester.com/NCBO56250

+0

Thank s so viel für die Antwort! Die Datepart-Funktion extrahiert jedoch nur die Kalenderwoche aus einem Datum. Die Wochennummern in Tabelle 1 sind nach einem Geschäftsjahr beginnend im Oktober nummeriert. Irgendwelche Ideen für diese Art von Situation? –

+0

Muchisimo Gracias Senor! Er sido trabajando und este todo el dia! Gracias! –

+0

Ich bin froh, Ihnen helfen zu können. – McNets

Verwandte Themen