特定于SQL的DATEADD要求
我有三个DM_事件。事件代码: 在本例中,我需要使用一个日期参数来选择最新的所需报告日期:“4/28/15”以提取截至该日期的每个项目的SUMDM_DAILYCOST.cost_。”使用所选日期,CMP'和WOV'可以正常工作 但是,对于代码“DRL”,我需要提取DATEADDd的每个项目的SUMDM_DAILYCOST.cost_,-1、'4/28/15' 我想我让事情变得更难了,但我一直在寻找解决办法。非常感谢您的任何见解特定于SQL的DATEADD要求,sql,dateadd,ssms-2014,Sql,Dateadd,Ssms 2014,我有三个DM_事件。事件代码: 在本例中,我需要使用一个日期参数来选择最新的所需报告日期:“4/28/15”以提取截至该日期的每个项目的SUMDM_DAILYCOST.cost_。”使用所选日期,CMP'和WOV'可以正常工作 但是,对于代码“DRL”,我需要提取DATEADDd的每个项目的SUMDM_DAILYCOST.cost_,-1、'4/28/15' 我想我让事情变得更难了,但我一直在寻找解决办法。非常感谢您的任何见解 SELECT cd_well.completion_well_id,
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 )
您所需要的只是WHERE语句中的正确条件。您应仅选择日期为'4/28/15'的'CMP'和'WOV'事件以及日期为'4/28/15'的'DRL'事件ADDD,-1、'4/28/15':
并从查询中删除HAVING语句。Heh,看起来像EDM;
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 )
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 ...