Salesforce 提取在过去x小时内更新的数据的SOQL查询

Salesforce 提取在过去x小时内更新的数据的SOQL查询,salesforce,soql,Salesforce,Soql,我正在使用并计划一个应该每x小时运行一次的任务。 我的问题是,我的SOQL查询从数据库中获取所有项目,我只需要提取在过去x小时内更新的内容。我怎样才能把我的疑问限制在这一点上 这是我的process-config.xml文件 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean

我正在使用并计划一个应该每x小时运行一次的任务。 我的问题是,我的SOQL查询从数据库中获取所有项目,我只需要提取在过去x小时内更新的内容。我怎样才能把我的疑问限制在这一点上

这是我的process-config.xml文件

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="AMP_AIMS" class="com.salesforce.dataloader.process.ProcessRunner" singleton="false">
        <description>Created by Dataloader Cliq.</description>
        <property name="name" value="AMP_AIMS"/>
        <property name="configOverrideMap">


            <map>
                <entry key="dataAccess.name" value="...\AMP_AIMS\write\AMP_AIMS.csv"/>
                <entry key="dataAccess.readUTF8" value="true"/>
                <entry key="dataAccess.type" value="csvWrite"/>
                <entry key="dataAccess.writeUTF8" value="true"/>
                <entry key="process.enableExtractStatusOutput" value="true"/>
                <entry key="process.enableLastRunOutput" value="true"/>
                <entry key="process.lastRunOutputDirectory" value="...\AMP_AIMS\log"/>
                <entry key="process.operation" value="extract"/>
                <entry key="process.statusOutputDirectory" value="...\AMP_AIMS\log"/>
                <entry key="sfdc.bulkApiCheckStatusInterval" value="5000"/>
                <entry key="sfdc.bulkApiSerialMode" value="5000"/>
                <entry key="sfdc.debugMessages" value="false"/>
                <entry key="sfdc.enableRetries" value="true"/>
                <entry key="sfdc.endpoint" value="https://test.salesforce.com/services/Soap/u/24.0"/>
                <entry key="sfdc.entity" value="Agency_Profile__c"/>
                <entry key="sfdc.extractionRequestSize" value="500"/>
                <entry key="sfdc.extractionSOQL" value="Select a.Total_Annual_Sales__c, a.Market_Specialties__c, a.Market_Focus__c,  a.Destination_Specialties__c, a.CreatedDate, a.Agency_Website__c, a.Agency_Business_Email__c From Agency_Profile__c a"/>
                <entry key="sfdc.insertNulls" value="false"/>
                <entry key="sfdc.loadBatchSize" value="100"/>
                <entry key="sfdc.maxRetries" value="3"/>
                <entry key="sfdc.minRetrySleepSecs" value="2"/>
                <entry key="sfdc.noCompression" value="false"/>
                <entry key="sfdc.password" value="blabla"/>
                <entry key="sfdc.proxyHost" value=""/>
                <entry key="sfdc.proxyNtlmDomain" value=""/>
                <entry key="sfdc.proxyPassword" value=""/>
                <entry key="sfdc.proxyPort" value=""/>
                <entry key="sfdc.proxyUsername" value=""/>
                <entry key="sfdc.timeoutSecs" value="60"/>
                <entry key="sfdc.useBulkApi" value="false"/>
                <entry key="sfdc.username" value="bla"/>
            </map>
        </property>
    </bean>
</beans>

由Dataloader Cliq创建。

过去我对类似的事情很满意:

SELECT Total_Annual_Sales__c, Market_Specialties__c, Market_Focus__c,  Destination_Specialties__c, CreatedDate, Agency_Website__c, Agency_Business_Email__c
FROM Agency_Profile__c
WHERE LastModifiedDate = TODAY AND HOUR_IN_DAY(LastModifiedDate) > 9
你会安排它在12点运行,然后在下午3点运行类似的程序


仍然不理想,因为如果其中一次跑步失败,您希望赶上。。。因此,对于故障保护解决方案,有必要围绕加载程序编写一些脚本,以节省上次成功运行的时间。

我不确定如何表示“最后X小时”,但如果可能的话,可能会在soql语句的where子句中使用LASTMODIFEDDATE字段和date方法。本文档描述了API中可用的getUpdated()方法。但是,我现在不确定您是否可以通过dataloader访问它,我想Talend支持GetUpdate()api方法,但我不确定APEX dataloader是否支持,因为我在文档中找不到对它的引用。@Sdry:我过去对类似的东西很满意
SELECT Id,LastModifiedDate=TODAY和HOUR_IN_DAY(LastModifiedDate)>9的账户名称
。你会安排它在12点运行,然后在下午3点运行类似的程序。。。仍然不理想,因为如果其中一次跑步失败,您希望赶上。。。因此,有必要在加载程序周围编写一些脚本,以节省上次成功运行的时间。@这对我很有用,谢谢。你能在回复中重写你的评论吗,这样我就可以给你一些报应了。嗨,我需要做一些类似于这里描述的事情,但是我需要我的查询每小时运行一次。我看到午夜过后日期变更时出现问题。LastModifiedDate=如果修改发生在今天之前且自上次作业执行以来,则今天将不起作用。例如,如果我每小时半执行工作。是否有人知道一种方法来涵盖这个场景?Thank.hi,我以从帐户a中选择a.Id的方式运行sql,其中a.LastModifiedDate=TODAY和HOUR_IN_DAY(a.LastModifiedDate)>1。我想在最后一个小时内查询。但即使有一些数据是我手动更新的,也不会显示任何行。@kitokid
HOUR\u IN_DAY(LastModifiedDate)>1
将返回在凌晨1点到2点之间更新的内容。我认为您最好的选择是将bind变量与
:System.now().addHours(-1)
一起使用,或者如果它必须是纯SOQL-也许只需按最后一个mod date降序对它们进行排序并签入循环?