- ベストアンサー
MS-ACCESSで年月日ごとの数量の比較を行うSQLについて教えてください
- MS-ACCESSにて、年月日と数量の2つのカラムがあります。年月日の最新200件のレコードで、当日の数量が前日の数量より大きいものと小さいものの数を求めたいと思います。
- 例えば、1/2は1/1の数量より大きく、1/3は1/2の数量より小さい、そして1/4は1/3の数量より大きいという場合、大きい値は2で小さい値は1となります。
- 1つのSQL文で解決する方法や、大きい値と小さい値でそれぞれ別のSQL文を使用して解決する方法もご教示いただければと思います。
- みんなの回答 (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.前日; では?
お礼
ありがとうございます