0

このクエリで何が間違っていますか?

SELECT * FROM TreatmentPlanDetails 
WHERE 
   accountId = 'ag5zfmRvbW9kZW50d2ViMnIRCxIIQWNjb3VudHMYtcjdAQw' AND 
   status = 'done' AND 
   category = 'chirurgia orale' AND
   setDoneCalendarEventStartTimestamp >= [timestamp for 6 june 2012]  AND 
   setDoneCalendarEventStartTimestamp <= [timestamp for 11 june 2012]  AND 
   deleteStatus = 'notDeleted' 
ORDER BY setDoneCalendarEventStartTimestamp ASC

レコードを取得していませんが、where 句の条件を満たすレコードがあることは確かです。正しいレコードを取得するには、タイムスタンプ間隔を 1 ミリ秒広げる必要があります。それは正常ですか?さらに、カテゴリ フィルターを削除してこのクエリを変更すると、正しい結果が得られます。これは間違いなく奇妙です。グーグルグループでも質問しましたが、答えがありませんでした。とにかく、詳細については: https://groups.google.com/forum/?fromgroups#!searchin/google-appengine/query/google-appengine/ixPIvmhCS3g/d4OP91yTkrEJ

4

3 に答える 3

1

あなたの質問に固有ではない余談: エンティティ プロパティ名は、ストレージ クォータの一部としてカウントされます。これが巨大なデータセットになる場合は、setDoneCalendarEventStartTimestamp などのプロパティ名に必要以上の費用がかかる可能性があります。

于 2012-06-14T15:58:31.513 に答える
1

クエリに入るタイムスタンプの作成について具体的に話しましょう。タイムスタンプ レコードを作成するためにどのコードを使用していますか? ファジングはクエリに少し影響するため、これは明らかに重要です。データストアでは、タイムスタンプが posix タイムスタンプをマイクロ秒単位で表す整数として記録されることが関連している可能性があります。つまり、1970 年 1 月 1 日 UTC からのマイクロ秒数 (閏秒はカウントされません)。また、日付(時間のないもの) が午前 0 時、つまりその日の最も早い時間として表されることも重要です。ただし、正確なコードを示してください。(取得しようとしているレコードの実際の内容を表示することも重要です。)

于 2012-06-14T14:56:18.190 に答える
0

あなたが書いているので:

カテゴリ フィルターを削除してこのクエリを変更すると、正しい結果が得られます

これはおそらく、一致するレコードをデータ ストアに書き込んだ時点でカテゴリのインデックスが作成されていなかったことを意味します。新しく作成されたインデックスにレコードを追加する場合は、レコードをデータ ストアに再書き込みする必要があります。

于 2012-06-14T11:23:16.333 に答える