n日前を起点にそれ以前のデータを取得するという条件を作りたい
SELECT Id From Account WHERE CreatedDate <= n日前
LAST_N_DAYS:nが使えるかな?
こんな条件になるのですが、 n日前
をSOQLの日付リテラルが使ってできないかなーと思いながら見ていて
LAST_N_DAYS:n
がそれっぽくできるかなと思ったんですけど、
数値 n が指定されている場合、本日から、その n 日前までが指定されます。
これには、過去の日だけではなく、本日も含まれます。たとえば、LAST_N_DAYS:1 には、昨日と本日が含まれます。
過去の日だけではなく、本日も含まれます
こう書いてある通り、その期間を含んで条件を作るんですよね。つまり、
CreatedDate <= IN (2/12, 2/13, 2/14, 2/15)
こんな書き方はないけど、↑みたいなイメージになる。
要するに、
CreatedDate <= 2/15
と変わらない。
LAST_N_DAYS:nを活かして期待するレコードを取得するとしたら?
SELECT Id
From Account
WHERE CreatedDate <= last_n_days:3
AND CreatedDate != last_n_days:3
こんな感じになるんですけど、分かりづらいですね。
結果
Apex側で三日前の値を作り、クエリ文にbindして作る感じにするというところに落ち着きました。
Date threeDaysAgo = Date.today() - 3;
Datetime dateTimeOfThreeDaysAgo = Datetime.newInstance(threeDaysAgo, Time.newInstance(0, 0, 0, 0));
String query = 'SELECT Id FROM Account WHERE CreatedDate = :dateTimeOfThreeDaysAgo';
いい方法あったら教えてください。