MS-ACCESSで年月日ごとの数量の比較を行うSQLについて教えてください
- MS-ACCESSにて、年月日と数量の2つのカラムがあります。年月日の最新200件のレコードで、当日の数量が前日の数量より大きいものと小さいものの数を求めたいと思います。
- 例えば、1/2は1/1の数量より大きく、1/3は1/2の数量より小さい、そして1/4は1/3の数量より大きいという場合、大きい値は2で小さい値は1となります。
- 1つのSQL文で解決する方法や、大きい値と小さい値でそれぞれ別のSQL文を使用して解決する方法もご教示いただければと思います。
- ベストアンサー
SQLを教えてください
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でもいいです よろしく、お願いします
- neko-007
- お礼率51% (28/54)
- その他(ソフトウェア)
- 回答数1
- ありがとう数1
- みんなの回答 (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.前日; では?
関連するQ&A
- 割合(パーセント)を求めるにはどのようにSQLを書けばよいのでしょうか?
SQLで グループ毎にカウントした数でなくて割合を求めたいのです。 select name, count(*) from データベース名 group by name order by 2 desc; とすると、以下のように200件あるデータで グループ(名前)毎に個数が表示されますが、 田中 70 上村 120 橘川 10 下のように割合(パーセント)を求めるにはどのようにSQLを書けばよいのでしょうか? 田中 70 35% 上村 120 60% 橘川 10 5%
- ベストアンサー
- MySQL
- 秀丸でSQLを書く際に SQLの予約語だけ大文字
秀丸でSQLを書く際に SQLの予約語だけを、大文字に変換するよい方法は? たとえば select * from table_1 where id=1 order by id desc; と書いて、マクロを起動すると SELECT * FROM talbe_1 WHERE id=1 ORDER BY id DESC; となるようにするよい方法はありませんか? また、予約語が「強調」されると尚良いです。
- 締切済み
- PostgreSQL
- SQL count 別名を条件に使用
いつもお世話になっております。 標題についてご教授頂きたく質問させて頂きました。 [SQL} select A, B, count(*) as cnt from product where A=1 and cnt > 2 group by A order by cnt desc とこのようにSQLを記述して実行したのですが、 cnt>2でエラーが出ます。 order by には count の別名を使用できるのですが、 where句やHAVINGでは使えません。 この場合 cont(*)>2 またはcount(項目名)>2 としなければならないのでしょうか
- ベストアンサー
- PostgreSQL
- VB2010のSQLを使ったレコードカウント方法
VB2010にて他のシステムから出力したCSVファイルにアクセスして集計を行おうとしています。 重複を排除したカウントを得たいのですがうまくいきません。 (1) SQL = "SELECT DISTINCT 物品ID FROM …" だと目的のレコードを抽出できるのですがCOUNTを使って (2) SQL = "SELECT COUNT(DISTINCT 物品ID) AS 物品数 FROM …" とする『演算子がありません』とエラーが出て (3) SQL = "SELECT DISTINCT COUNT(物品ID) AS 物品数 FROM …" とすると値はですのですが(1)のレコード数と違う数が出てきます??? 素人の手探りでプログラミングをしているので動きの違いが分かりません ご教授お願いします。
- ベストアンサー
- Visual Basic
- SQLについて何ですが
一つのSQLで下記の様な検索が出来ないかと考えています、 大分類に分けて大分類の中で売れている商品のTOP10を表示し、 現在表示されている商品を抜いた売れている商品TOP100もに表示できるようとしています、 分類のテーブル・商品がどの分類に当てはまるのか関連づけし注文数も保持しているテーブル・商品の売れ行きを保持しているテーブルがあり 分類テーブルには15個(将来的に増える可能性ある)の分類ワードが入っていて、分類別に売れているTOP10を表示し重複部分もあるので最大150個の商品が表示されるようになっています、 全商品の売れ行きTop「表示されている商品プラス100件」を割り出しその中から表示商品はずしてみようと思いこの様なSQL文と作ったのですが今一うまくいっていないような気がします、 「select 商品名 注文数 from 商品テーブル where 商品名 not in( select 商品名 from 分類商品テーブル where 分類 in ( select 分類 from 分類テーブル ) order by 注文数 desc limit 10) order by 注文数 desc limit 表示商品数+100」 どうもうまく表示できていない様な気がしているのですが、 このSQLどうなのでしょうか? ほかにもっといいSQL文があれば教えてください。 」
- 締切済み
- PostgreSQL
- SQL WHERE文のノットイコールについて
初歩的な質問ですみません。 Oracle9iでsqlplusで接続しています。 「member_accountテーブルのdelete_flag(VARCHAR2)カラムの値が'1'ではない」ものを抽出したいと考えてます。 ただ、正しい結果が返ってきません。 何が問題でしょうか?よろしくお願いいたします。 ============================================================ SQL> select count(ID) from member_account; COUNT(ID) ---------- 16450 SQL> SQL> select count(ID) from member_account where delete_flag='1'; COUNT(ID) ---------- 107 SQL> SQL> select count(ID) from member_account where delete_flag<>'1'; COUNT(ID) ---------- 0 SQL> SQL> select count(ID) from member_account where delete_flag!='1'; COUNT(ID) ---------- 0 ============================================================ よろしくお願いいたします。
- ベストアンサー
- Oracle
- SQLの外部結合について教えて下さい
いつもお世話になっています。 SQL構文の外部結合が分らなくて困っています。 どうか教えて下さい。 JSPからString Nam = (request.getParameter("param"));で値を受け取ってその値でT_Tableと一致するデータのSQLを実行します。 SELECT * FROM T_Table where ID='"+ Nam +"' order by 日付 desc この結果とT_TableAの「番号」というフィールドと一致する問い合わせのSQLが分りません。自分なりに考えて作りましたがHTMLの部分の表示だけでレコードが表示されないので間違っているのだと思います。 色々調べてみましたが該当のサンプルがなかったので困っています。 教えて下さい!宜しくお願い致します。 【自分で作成してみたSQLです】 テーブルはSQL Serverです。 "SELECT * FROM T_Table where ID='"+ Nam +"' INNER JOIN where ID='"+ Nam +"' ON [T_Table].[番号] = [T_TableA].[番号] order by 日付 desc"
- ベストアンサー
- Java
- SQLエラー
検索システムの検索結果の分割をしようとしています。 しかしどうしてもSQL文にエラーがでてしまいます。 SELECT * FROM shops where (area='◯◯◯') ORDER BY id DESC limit0, 10 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limit0, 10' at line 1 該当するSQL文は以下になります。 $query = "SELECT * FROM shops"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC '; } $query .= "limit" . $page_num*10 . ", 10" ; limit句の使い方等間違いはないのかなと思うのですが、いかがでしょうか? アドバイスご教示いただけないでしょうか。 よろしくお願いします。
- ベストアンサー
- PHP
- SQL文を教えてください。
SQL文を教えてください。 グループ毎にレコード数をカウントして、レコード数が大きい順に並び替えたいです。 番号 枝番 金額 111 1 100 111 2 100 222 1 100 222 2 100 222 3 100 333 1 100 444 1 100 444 2 100 【答え】 番号 件数 222 3 111 2 444 2 333 1 のようにorder by で並べ替えたいです。 SQL一発でできませんか? SQLに詳しい方、ご教授ください。
- ベストアンサー
- Oracle
- Acess2003で複雑なSQL?
Access2003で以下のSQLを実行させることはできるのでしょうか? 直接SQLで実行する方法と、Access独特の両方で実行する方法が知りたいです。 select name, count(*) from テーブル group by name order by 2 desc;
- 締切済み
- オフィス系ソフト
お礼
ありがとうございます