アプリ版:「スタンプのみでお礼する」機能のリリースについて

Accessで特定のクエリを抽出したいのですが、うまく行きません。

完了フラグに1が入ってる最後のレコードを抽出しようと考えています。
完了フラグが0の場合は、スキップしようと考えています。

フラグ日時はテキスト型、完了フラグは数値型です。


SELECT テーブル名.[フラグ日時], テーブル名.完了フラグ
FROM テーブル名
WHERE (((テーブル名.[フラグ日時])=(SELECT MAX(フラグ日時) FROM テーブル名 WHERE ID=ID))) AND ((テーブル名.完了フラグ)=1));


これで抽出しようとすると、最初は最終レコードを抽出します。
その後に新たなレコードを追加しても、前回抽出したレコードを抽出して最新のレコードを抽出してくれません。
新たなレコードは最新の日時のものしか作成されません

抽出が出来ている同じレコード自体は同じ書き方をしています。。。

SQLの書き方が悪いのでしょうか?

A 回答 (1件)

フラグ日時にどのようなフォーマットでデータがあるのでしょう?


年月日自分秒でそれぞれ一桁の部分があるとしたら期待した通りには抽出できません。
たとえば今日の日付で
2016-2-25 ×
2016-02-25 ○、一桁の場合にゼロフィル
フラグ日時がテキスト型なので一文字ごとの比較で並び順が決定されます。
この辺は大丈夫ですか?
フラグ日時で並び替えても確認できます。
もし、私のヤマ勘が当たっていたとしたら
SQL文中で日付時刻型に変換してからになりますが
無駄な処理が入るために遅くなります。
ゼロフィルするか、フィールドのデータ型をテキスト型から日付時刻型に変更するかですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!