• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLを教えてください)

MS-ACCESSで年月日ごとの数量の比較を行うSQLについて教えてください

このQ&Aのポイント
  • MS-ACCESSにて、年月日と数量の2つのカラムがあります。年月日の最新200件のレコードで、当日の数量が前日の数量より大きいものと小さいものの数を求めたいと思います。
  • 例えば、1/2は1/1の数量より大きく、1/3は1/2の数量より小さい、そして1/4は1/3の数量より大きいという場合、大きい値は2で小さい値は1となります。
  • 1つのSQL文で解決する方法や、大きい値と小さい値でそれぞれ別のSQL文を使用して解決する方法もご教示いただければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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.前日; では?

neko-007
質問者

お礼

ありがとうございます