datetime过滤器mySQL

时间:2015-07-14 19:30:37

标签: mysql datetime

我需要合并2个查询。两个查询中的第二个用于根据上次更新的传输日期(Datetime)过滤行。我正在使用mySQL数据库,并且正在尝试使用过滤器来恢复正确的结果。

查询1:

SELECT DISTINCT 
    F.client_license_ID
    , EM.create_DTM
    , EM.event_ID
    , CEQ.consumer_ID
    , EM.event_mapping_ID em_ID
    , EM.export_value campaign_number
    , EM.export_value_2 sequence_number
    , EM.export_value_3 campaign_number_2
    , EM.export_value_4 sequence_number_2
    , EM.export_value_5 ffs_event_id
    , EM.export_value_6
    , EM.export_value_7
    , EM.export_value_8
    , EM.export_value_9
    , EM.export_value_10
    , F.footprint_ID
    , F.event_token_ID
FROM data_transfer.Mappings EM
JOIN data_transfer.Event_Queue CEQ ON CEQ.event_ID = EM.event_ID
JOIN efn.Footprints F ON CEQ.consumer_ID = F.consumer_ID
JOIN data_transfer.DT_Runs as DR ON DR.data_transfer_ID = EM.data_transfer_ID
LEFT JOIN efn_data_transfer.CRM_Records LCR ON LCR.consumer_ID = CEQ.consumer_ID
WHERE EM.data_transfer_ID = 24
AND EM.mode = 'production'
AND EM.active_flag = 1
AND F.sample_flag = 0
AND LCR.failureCode = 0
AND EM.create_DTM > ?

查询2:

SELECT CAST(DATE_SUB(start,INTERVAL 3 DAY) AS CHAR) last_transfer
, CAST(DATE_FORMAT(NOW(),"%Y%m%d") AS CHAR) today
, CAST(DATE_FORMAT(NOW(),"%H%i%s") AS CHAR) "Time"
, CAST(DATE_FORMAT(NOW(),"%m%d%Y") AS CHAR) "Date"
, NOW() timeNow
FROM data_transfer.DT_Runs DTR
WHERE DTR.data_transfer_ID = 24
AND DTR.result = 1
AND DTR.mode = 'production'
ORDER BY DTR.dt_run_ID DESC
LIMIT 1;

我的尝试是为最后一个转移日期添加一个where过滤器(AND EM.create_DTM> = DR。start() - INTERVAL 3 DAY),但它没有按预期工作。目前我有一个ETL作业,处理从查询2中的“最后一次传输”变量进入的两个查询? where过滤器的变量。感谢帮助

2 个答案:

答案 0 :(得分:1)

您可以将其实现为一个查询。

SELECT DISTINCT 
    F.client_license_ID
    , EM.create_DTM
    , EM.event_ID
    , CEQ.consumer_ID
    , EM.event_mapping_ID em_ID
    , EM.export_value campaign_number
    , EM.export_value_2 sequence_number
    , EM.export_value_3 campaign_number_2
    , EM.export_value_4 sequence_number_2
    , EM.export_value_5 ffs_event_id
    , EM.export_value_6
    , EM.export_value_7
    , EM.export_value_8
    , EM.export_value_9
    , EM.export_value_10
    , F.footprint_ID
    , F.event_token_ID
FROM data_transfer.Mappings EM
JOIN data_transfer.Event_Queue CEQ ON CEQ.event_ID = EM.event_ID
JOIN efn.Footprints F ON CEQ.consumer_ID = F.consumer_ID
JOIN data_transfer.DT_Runs as DR ON DR.data_transfer_ID = EM.data_transfer_ID
LEFT JOIN efn_data_transfer.CRM_Records LCR ON LCR.consumer_ID = CEQ.consumer_ID
WHERE EM.data_transfer_ID = 24
AND EM.mode = 'production'
AND EM.active_flag = 1
AND F.sample_flag = 0
AND LCR.failureCode = 0
AND EM.create_DTM > (SELECT last_transfer FROM (SELECT CAST(DATE_SUB(start,INTERVAL 3 DAY) AS CHAR) last_transfer
, CAST(DATE_FORMAT(NOW(),"%Y%m%d") AS CHAR) today
, CAST(DATE_FORMAT(NOW(),"%H%i%s") AS CHAR) "Time"
, CAST(DATE_FORMAT(NOW(),"%m%d%Y") AS CHAR) "Date"
, NOW() timeNow
FROM data_transfer.DT_Runs DTR
WHERE DTR.data_transfer_ID = 24
AND DTR.result = 1
AND DTR.mode = 'production'
ORDER BY DTR.dt_run_ID DESC
LIMIT 1) )

答案 1 :(得分:0)

看看约会: https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_datediff

其中datediff(EM.create_DTM,DR.start())> = {x} //其中x是' days'的长度。在列值之间。