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

MS-ACCESSにて以下のような条件のSQLを教えてください

年月日、数量の2つのカラムがあります

年月日 数量
1/1  100
1/2  150
1/3  120
1/4  200

年月日には、順番に年月日が入っています
数量には、いろいろな数値が入っています

ここで年月日の最新200件のレコードで
......select top 200 order by 年月日 desc
当日の数量が前日の数量より大きいものの数と小さいものの数
.......count(*) where 当日の数量 > 前日の数量 where 当日の数量 < 前日の数量


例の場合だと
1/2は1/1の数量より大きい
1/3は1/2の数量より小さい
1/4は1/3の数量より大きい

結果としてカウントした値は
大きい=2
小さい=1

を求めたいと思います

ひとつのSQLで、できればいいのですが
大きいのひとつ
小さいのひとつ
の二つのSQLでもいいです

よろしく、お願いします

A 回答 (1件)

テーブル名を、tbl として


クエリ1
SELECT tbl.年月日, tbl.数量,
(select top 200 max(年月日) from tbl as tblA where tblA.年月日 <tbl.年月日) AS 前日
FROM tbl order by 年月日 desc;

年月日   数量   前日
2014/01/04 200  2014/01/03
2014/01/03 120  2014/01/02
2014/01/02 150  2014/01/01

クエリ二個目
SELECT tbl.年月日, [クエリ1].年月日, tbl.数量, [クエリ1].数量,
IIf([tbl].[数量]<[クエリ1].[数量],1,0) AS 大,
IIf([tbl].[数量]>[クエリ1].[数量],1,0) AS 小
FROM tbl INNER JOIN クエリ1 ON tbl.年月日 = [クエリ1].前日;

tbl.年月日 クエリ1.年月日 tbl.数量 クエリ1.数量 大 小
2014/01/01  2014/01/02   100    150    1  0
2014/01/02  2014/01/03   150    120    0  1
2014/01/03  2014/01/04   120    200    1  0
になります。SQLビューからデザインビューに切り替えても確認できます。

二つを合体して確認、クエリ1は、Q にしています。
SELECT tbl.年月日, Q.年月日, tbl.数量, Q.数量,
IIf([tbl].[数量]<Q.[数量],1,0) AS 大,
IIf([tbl].[数量]>Q.[数量],1,0) AS 小
FROM tbl INNER JOIN
(SELECT top 200 tbl.年月日, tbl.数量, (select max(年月日) from tbl as tblA where tblA.年月日 <tbl.年月日) AS 前日 FROM tbl order by 年月日 desc) AS Q ON tbl.年月日 = Q.前日;

最終的に、大小の合計だけのクエリ
SELECT Sum(IIf([tbl].[数量]<Q.[数量],1,0)) AS 大,
Sum(IIf([tbl].[数量]>Q.[数量],1,0)) AS 小
FROM tbl INNER JOIN
(SELECT top 200 tbl.年月日, tbl.数量, (select max(年月日) from tbl as tblA where tblA.年月日 <tbl.年月日) AS 前日 FROM tbl order by 年月日 desc) AS Q
ON tbl.年月日 = Q.前日;

では?
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2014/03/17 09:39

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