Как мне сделать запрос SOQL подобным образом?
SELECT id FROM Account WHERE LastActivityDate = 30_DAYS_AGO
Это приводит к ошибке:
MALFORMED_QUERY: Account WHERE LastActivityDate = 30_DAYS_AGO ^
SELECT id FROM Account WHERE LastActivityDate = LAST_N_DAYS:30
Когда вы делаете это из apex, вы можете вычислить дату в apex, а затем связать ее с вашим запросом, например,
date d = system.today().addDays(-30); Account [] acc= [select id from account where createdDate = :d];
Select Id from Account Where LastActivityDate = N_DAYS_AGO:30
LAST_WEEK и LAST_MONTH также просты и хорошо работают.
LAST_WEEK
LAST_MONTH
SELECT id FROM Account WHERE LastActivityDate > LAST_MONTH
Для получения дополнительной информации перейдите по этой ссылке: http://www.salesforce.com/us/developer/docs/officetoolkit/Content/sforce_api_calls_soql_select_dateformats.htm
Поскольку это 30 дней назад, вы используете это -
SELECT ID FROM Account WHERE LastActivityDate < LAST_N_DAYS:30
Страница функций даты SOQL, кажется, переместилась сюда: https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_select_dateformats.htm
Для пояснения, SOQL позволяет сравнивать поле даты (например, LastActivityDate) с диапазоном дат, используя оператор сравнения. Таким образом, «LastActivityDate = LAST_MONTH» равносильно тому, что дата больше или равна началу первого дня предыдущего месяца И меньше или равна концу последнего дня.