• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLで期間をずらした集計処理)

SQLで期間をずらした集計処理

chie65535の回答

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8514/19356)
回答No.4

INNER JOINに書き換えたのが以下。 q1クエリ SELECT date, Sum(num) AS num, date1, date2 FROM (SELECT Table1.date, Table1.num,Table1.date-1 as date1,Table1.date-2 as date2 FROM Table1 union SELECT Table1.date-1, 0 as num,Table1.date-2 as date1,Table1.date-3 as date2 FROM Table1 union SELECT Table1.date-2, 0 as num,Table1.date-3 as date1,Table1.date-4 as date2 FROM Table1) GROUP BY date, date1, date2; 結果クエリ SELECT q1.date, q1.num+q1_1.num+q1_2.num AS sum_num FROM (q1 INNER JOIN q1 AS q1_1 ON q1.date1 = q1_1.date) INNER JOIN q1 AS q1_2 ON q1_1.date1 = q1_2.date WHERE q1.num<>0;

関連するQ&A

  • MSDEのSQLについて

    DB初心者です。 通常のAcceessで支障なく使っていた以下のようなSQL文がMSDEのビューではエラーがかかって使えません。原因と対応法を教えて頂けないでしょうか? < 「テーブル1」の「フィールド1」と「フィールド2」の相関係数を算出するSQL文 > SELECT (Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))*([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))))/Sqr(Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))^2)*Sum(([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))^2)) AS 相関係数 FROM テーブル1; これがMSDEだと下のようなエラーになります。 ADOエラー: 集計やサブクエリを含む式に対して集計関数を実行することは出来ません。 どうしたいいでしょうか? また、MSDEや易しいTransactSQLを習得する良い方法があればアドバイスを頂きたいのですが。

  • SQL Server2005でWITHキーワードは使えますか?

    サブクエリをネストさせたくない(FROM句に書きたくない)ので、Oracleで使っていたWITH キーワードを使いたいのですが、SQL Server2005では使えますか?

  • 集計についてのSQLの組み立て方

    SQLについての質問です。 MySQLを使っています。 1か月間の得意先別の入金の集計を取りたいと思っています。 表としては以下のような感じです。 ID  得意先名  現金計 振込計 相殺計 手数料計  合計 =========================================================== 001 aaaaaaa   30,000  40,000  25,000    840  95,840 002 bbbbbbb   10,000  20,000  30,000    420  60,420 SELECT * sum(nyukin) AS genkin FROM nyukin_meisai WHERE tokuisaki_id = '001' AND nyukin_kubun = '現金' AND uriage_bi BETWEEN '2014/05/01' AND '2014/05/31' SELECT * sum(nyukin) AS furikomi FROM nyukin_meisai WHERE tokuisaki_id = '001' AND nyukin_kubun = '振込' AND uriage_bi BETWEEN '2014/05/01' AND '2014/05/31' 以下続く と得意先毎/各区分ごとに一つひとつSQLを発行すればできるんでしょうけど、 これをひとつのSQLで実現したいと思っていますがSQLをどのように組み立て てよいものやら困っています。 case を組み込んだりしてもうまくいきませんでした。 どなたかご指導下さい。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 売り上げ集計SQLが作れません

    1つのTABLEに、1日の売上げ高を商品ごとに登録していくDBがあります。 簡単な構造は以下のとおりです。 日付       |A品売上額  |B品売上額 | 2008/11/01 |500000    |600000   | 2008/11/02 |450000    |800000   | 2008/11/03 |100000    |700000   | ・・・ 2008/11/30 |200000    |500000   | 2008/12/01 |300000    |100000   | <質問> それぞれの商品の1ヶ月売上高をSQLで抽出したいと思うのですが、Group byで何を指定したらいけるのかわからず困っています。 SQLで計算せずに抽出だけ行って、CGI側で計算するしかないのでしょうか? アドバイスお願いいたします。 <最初に考えたSQL(Group byがないためエラーになりました)> select sum(a),sum(b) from uriage where date between '2008/11/01' AND '2008/11/30';

  • SQLの書き方を教えて!

    select name,SUM(kingak) from where date between 150221 and 150320 group by frjpc.trcd のようにSUMで集計を行うSQLを発行する時に,同時にkingak順にsortすることは可能なのでしょうか? select name,SUM(kingak) from where date between 150221 and 150320 group by frjpc.trcd order by SUM(kingak) としたいところですが,これではエラーになりますね。 SQLでは解決できないんでしょうか?

  • Access2007でSQLの複数列副問い合わせについて

    VB2005+Access2007を使用しております SQL文の複数列副問い合わせについて教えて下さい 検索をしても他のデータベースのものばかりヒットし、解決できません SELECT * FROM Uriage WHERE (Date, DateID) = (SELECT Date, DateID FROM Uriage WHERE NAME = 'cup') これを実行すると 「メイン クエリの FROM 句の予約語 EXISTS を使用しないフィールド を複数返すサブクエリを作成しました。サブクエリのSELECT ステート メントを変更し、1 つのフィールドだけを指定してください。」 というエラーがでてしまいます。 形をかえ、 SELECT * FROM Uriage WHERE Date = (SELECT Date FROM UriageList WHERE NAME = 'cup') AND DateID =(SELECT DateID FROM UriageList WHERE NAME = 'cup') これを実行すると、 「このサブクエリでは 1 つのレコードしか返せません。」 というエラーがでてしまいます。 また、 SELECT * FROM Uriage WHERE (Date) IN (SELECT Date FROM UriageList WHERE NAME = 'cup') AND (DateID) IN (SELECT DateID FROM UriageList WHERE NAME = 'cup') を実行したところ、 エラーはでないものの、抽出結果が異なるものが出てきてしまいました。 これを解決するにはどのようにしたらよいのでしょうか? よろしくお願いいたします。 なお、某知恵袋にも同様の質問をしてしまいましたが、 回答者様への回答や追加質問が出来ず、 こちらに再質問させて頂きました。申し訳ございません。

  • SQL文について困っています

    ID(NUMBER型)と NUM(NUMBER型)と nenngetu (date型)を持ったテーブルAAAから、 ID=1000 のなかで日時が一番古い処理NOをselectするSQL文を書きましたが上手く実行されません。 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA) and ID=1000; ID=1000の条件をはぶき、 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA); でしたら、実行できました。 oracleで実行しようとしています。 どなたか、書き方を教えてください。

  • SQL文のAS句の意味を教えて下さい。

    generate_seriesをネットで調べていたら下記のページを見つけ、このページのSQL文を解読していたら一か所、わからないところがあったので質問しました。 下記のSQL文はサイトからコピーしたものです。 SELECT  current_date + s.a AS date FROM  generate_series(   (SELECT 0 - extract(dow FROM current_date))::int,   (SELECT 6 - extract(dow FROM current_date))::int  ) AS s(a); 下記が上記のSQL文を実行した結果です。   date ---------- 2012-02-26 2012-02-27 2012-02-28 2012-02-29 2012-03-01 2012-03-02 2012-03-03 上記のSQL文のAS句を下記のように私が変更してSQL文を実行したら上記の結果と同じ結果を出力しました。 SELECT  current_date + s AS date FROM  generate_series(   (SELECT 0 - extract(dow FROM current_date))::int,   (SELECT 6 - extract(dow FROM current_date))::int  ) AS s; 下記が上記のSQL文を実行した結果です。   date ---------- 2012-02-26 2012-02-27 2012-02-28 2012-02-29 2012-03-01 2012-03-02 2012-03-03 上記のSQLのAS句の「s(a)」はどういう意味ですか? ※AS句は別名を付ける際に使うと思うんですが... すみませんが説明していただけませんでしょうか? 宜しくお願いします。

  • アクセスのSQLで1週間の日付を求めたい

    アクセスのSQLで1週間の日付を求めたい postgresqlは多少わかるのですが、アクセスのSQLはジェネリックな部分しか知りません。 ネットで探していますが、なかなか良い例がみつかりません。 アクセスのSQLで今日から1週間を7レコードで返す方法を教えてください。 postgresなら以下で行けたと思います。 SELECT * FROM generate_series(CURRENT_DATE,CURRENT_DATE+6,'1 day'); 以上、宜しくお願い致します。

  • SQL文で困っています。

    ID(NUMBER型)と NUM(NUMBER型)と nenngetu (date型)を持ったテーブルAAAから、 ID=1000 のなかで日時が一番古い処理NOをselectするSQL文を書きましたが上手く実行されません。 select NUM from AAA where nenngetu = (select min(年月) from D_KR_SAP_IFRIREKIKANRI) and ID=1000; ID=1000の条件をはぶき、 select NUM from AAA where nenngetu = (select min(年月) from D_KR_SAP_IFRIREKIKANRI); でしたら、実行できました。 oracleで実行しようとしています。 どなたか、書き方を教えてください。