2015-04-28 37 views
0

我有三个DM_EVENT.event_code的:SQL - 具体DATEADD要求

'DRL' 
'CMP' 
'WOV' 

我需要使用一个日期参数,选择最新的所需报告日期(在这个例子:'4/28/15')拉SUM(DM_DAILYCOST.cost_per_item)作为那个日期。使用所选日期,'CMP''WOV'都可以。

但是,对于代码'DRL',我需要为DATEADD(d,-1,'4/28/15')SUM(DM_DAILYCOST.cost_per_item)

我觉得我比它需要更难,但我坚持一个解决方案。任何有识之士都非常感谢!

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声明中的正确条件。你应该日期DATEADD(d,-1,'4/28/15')选择的日期'4/28/15'只有'CMP''WOV'事件和'DRL'事件:

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语句。