プロが教える店舗&オフィスのセキュリティ対策術

続きです。

http://oshiete.goo.ne.jp/qa/8781159.html

SELECT
DBLookup("SELECT 受注日 FROM 受注履歴 WHERE 会員番号='" & [会員番号] & "' AND 受注日 < #" & [受注日] & "# ORDER BY 受注日 DESC") AS 前回受注日,
DateDiff("d",前回受注日,受注日) AS 切り替え,
*
FROM 受注履歴;


上記に対して、



すみません、以下はどこに組み込まれるのでしょうか。

>・SELECT文全体に、会員番号昇順で並べるORDER BY 節が欠落しています。

>・WHERE節を追加されると目的は達成されます。


注文1回のお客は除きます。。

A 回答 (1件)

添付図のクエリ13と14とは、多少、違っています。



相違点1、「会員番号+受注日」昇順になっているのか否か?
相違点2、「注文回数=1回」を含むか否か?

<相違点2について>

クエリ13のSELECT文には ORDER BY 節がありません。

<相違点2について>

クエリ13のSELECT文には WHERE 節がありません。

http://www.hitachi.co.jp/Prod/comp/soft1/manual/ …

SELECT文全体の構文については上記サイトを一読されて下さい。

【クエリ13】

SELECT
  DBLookup("SELECT 受注日 FROM 受注履歴 WHERE 氏名='" & [氏名] & "' AND 受注日 < #" & [受注日] & "# ORDER BY 受注日 DESC") AS 前回受注日,
  DateDiff("d",前回受注日,受注日) AS 切り替え,
  *
FROM 受注履歴;

【クエリ14】

SELECT
  DBLookup("SELECT 受注日 FROM 受注履歴 WHERE 会員番号=" & [会員番号] & " AND 受注日 < #" & [受注日] & "# ORDER BY 受注日 DESC") AS 前回受注日,
  DateDiff("d",前回受注日,受注日) AS 切り替え,
  *
FROM 受注履歴
WHERE (((DBLookup("SELECT COUNT(受注日) FROM 受注履歴 WHERE 会員番号=" & [会員番号]))>1))
ORDER BY 受注履歴.会員番号, 受注履歴.受注日;

<WHERE 節と DCount()>

http://office.microsoft.com/ja-jp/access-help/HA …

DBLookup("SELECT COUNT(受注日) FROM 受注履歴 WHERE 会員番号=" & [会員番号])
  ↓
DCount("受注日", "受注履歴", "会員番号=" & [会員番号])

両者は、同じ結果をもたらします。
ただ、実行速度は、DBLookup()がDCount()の約3倍速という結果も得られています。
まあ、一度つかっていることだし・・・。
ということで、クエリ14ではDBLookup()を使ってみました。

PS、WHERE 節のCOUNT()の書き方

○ SELECT COUNT(受注日) FROM 受注履歴
× SELECT COUNT(*) FROM 受注履歴

受注日にNull値があることも想定して、COUNT(*)ではなくCOUNT(受注日)がお薦め!
「ACCESSを活用して商品変動を捉えたい」の回答画像1
    • good
    • 0
この回答へのお礼

ありがとうございます。勉強になります❗

お礼日時:2014/10/07 01:12

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