2015-04-28 5 views
0

У меня есть три DM_EVENT.event_code «S:SQL - Specific DATEADD Требование

'DRL' 
'CMP' 
'WOV' 

Я Нуждаясь использовать параметр даты, чтобы выбрать самую последнюю желаемую дату отчетности (в данном примере: '4/28/15'), чтобы вытащить SUM(DM_DAILYCOST.cost_per_item) от эта дата. 'CMP' и 'WOV' в порядке, используя выбранную дату.

Однако, для кода 'DRL', мне нужно потянуть SUM(DM_DAILYCOST.cost_per_item) за DATEADD(d,-1,'4/28/15').

Я думаю, что я делаю это сложнее, чем нужно, но я придерживаюсь решения. Любое понимание очень ценится!

SELECT cd_well.completion_well_id, 
     cd_well.spud_date, 
     cd_well.well_common_name, 
     dm_afe.afe_no, 
     dm_dailycost.activity_code, 
     dm_dailycost.activity_subcode, 
     dm_dailycost.cost_code, 
     Sum(dm_dailycost.cost_per_item) AS Expr1, 
     dm_dailycost.cost_subcode, 
     dm_event.date_ops_end, 
     dm_event.event_code 
FROM dm_dailycost 
     INNER JOIN dm_afe 
       ON dm_dailycost.afe_id = dm_afe.afe_id 
     INNER JOIN dm_afe_event_link 
       ON dm_afe.afe_id = dm_afe_event_link.afe_id 
     INNER JOIN dm_event 
       ON dm_afe_event_link.well_id = dm_event.well_id 
        AND dm_afe_event_link.event_id = dm_event.event_id 
        AND dm_dailycost.well_id = dm_event.well_id 
        AND dm_dailycost.event_id = dm_event.event_id 
     INNER JOIN cd_well 
       ON dm_event.well_id = cd_well.well_id 
     INNER JOIN cd_site 
       ON cd_well.site_id = cd_site.site_id 
     INNER JOIN dm_report_journal 
       ON dm_dailycost.afe_id = dm_report_journal.afe_id 
WHERE (dm_report_journal.date_report BETWEEN '4/1/15' AND '4/28/15') 
     OR (dm_report_journal.date_report IS NULL) 
GROUP BY dm_dailycost.activity_subcode, 
      dm_dailycost.cost_code, 
      dm_event.date_ops_end, 
      cd_well.spud_date, 
      cd_well.completion_well_id, 
      dm_event.event_code, 
      dm_afe.afe_no, 
      dm_dailycost.cost_subcode, 
      dm_dailycost.activity_code, 
      cd_well.well_common_name, 
      dm_report_journal.date_report 
HAVING (Sum(dm_dailycost.cost_per_item) IS NOT NULL) 
+0

Хех, похоже, EDM;) – denied

ответ

0

Все, что вам нужно, это правильные условия в инструкции WHERE. Вы должны выбрать только 'CMP' и 'WOV' события на дату '4/28/15' и 'DRL' события на дату DATEADD(d,-1,'4/28/15'):

SELECT 
..., 
SUM(dm_dailycost.cost_per_item) as Expr1, 
... 
FROM ... 
INNER JOIN ... 
... 
WHERE 
     dm_event.event_code in ('CMP', 'WOV') 
    AND dm_report_journal.date_report = '4/28/15' 
    OR 
     dm_event.event_code = 'DRL' 
    AND dm_report_journal.date_report = DATEADD(d,-1,'4/28/15') 
GROUP BY ... 

И удалить HAVING заявление из запроса.