質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2121閲覧

List<SalesOrderSheet>を7日おきに集計する方法について

marshmallowy

総合スコア204

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/07/10 06:28

###前提・実現したいこと
1日から7日おきに合計金額を集計したいです。
ご教授の程、よろしくお願い申し上げます。

以下は、完成のイメージです。
また、青枠の集計は完了しています。
イメージ説明

###該当のソースコード

Java

1<%@page contentType="text/html" pageEncoding="UTF-8"%> 2<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 4<!DOCTYPE html> 5<html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>注文一覧</title> 9 </head> 10 <body> 11 <table> 12 <thead> 13 <tr> 14 <td>支払</td> 15 <td>店舗</td> 16 <td>通販</td> 17 </tr> 18 </thead> 19 <tfoot> 20 <%-- 一月の集計 --%> 21 <tr> 22 <td>合計</td> 23 <td><fmt:formatNumber value="${orderingTypeSalesSheet.stream().map(line -> line.storeTotalAmount).sum()}" pattern="###,###" /></td> 24 <td><fmt:formatNumber value="${orderingTypeSalesSheet.stream().map(line -> line.mailToOderTotalAmount).sum()}" pattern="###,###" /></td> 25 </tr> 26 </tfoot> 27 <tbody> 28 <c:forEach var="line" items="${orderingTypeSalesSheet}" varStatus="row"> 29 <tr> 30 <td><fmt:formatDate value="${line.paymentConfirm}" pattern="yyyy/MM/dd" /></td> 31 <td><fmt:formatNumber value="${line.storeTotalAmount}" pattern="###,###" /></td> 32 <td><fmt:formatNumber value="${line.mailToOderTotalAmount}" pattern="###,###" /></td> 33 </tr> 34 <%-- 7日毎の集計 --%> 35 <c:if test="${(row.count % 7) == 0}"> 36 <tr> 37 <td>合計</td> 38 <td><%-- ここには、店舗週毎の集計を出力したいです --%></td> 39 <td><%-- ここには、通販週毎の集計を出力したいです --%></td> 40 </tr> 41 </c:if> 42 </c:forEach> 43 </tbody> 44 </table> 45 </body> 46</html>

###補足情報
Java version "1.8.0_131"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

  • 通常週の集計は、日曜もしくは月曜から始まった一週間で集計しますが

今回のケースのように土曜日から集計するので間違いないでしょうか?

  • 7/18はデータ0,0ですがこの場合もデータは存在するのでしょうか?

それともデータはないけど7/18のカレンダーを元に0,0を表示するのでしょうか?

sample

SQL

1create table tbl(d date unique,tenpo int,tuhan int); 2insert into tbl value 3('2017-07-01',120800,109000), 4('2017-07-02',95896,371140), 5('2017-07-03',44200,24000), 6('2017-07-04',51600,14000), 7('2017-07-05',77634,0), 8('2017-07-06',87000,18303), 9('2017-07-07',159240,25300), 10('2017-07-08',0,74000), 11('2017-07-09',0,79705);

集計単位は日付から1引いた数を7で割ったあまりを日付から引いた日

SQL

1select d 2,d - interval (date_format(d,'%e')-1)%7 day as d2 3,sum(tenpo) 4,sum(tuhan) 5from tbl 6group by d

よってこれを利用して集計するとこう

select d ,sum(tenpo) ,sum(tuhan) from tbl group by d - interval (date_format(d,'%e')-1)%7 day ,d with rollup

一部題意にあわせて修正

一部推奨されない表現が含まれていますが、たぶんこれで大丈夫です

SQL

1select 2case 3when (select @d:=date_format(d,'%e') as dummy) between 1 and 7 then '1週目' 4when @d between 8 and 15 then '2週目' 5when @d between 15 and 21 then '3週目' 6when @d between 22 and 28 then '4週目' 7else '5週目' 8end as d2 9,d 10,sum(tenpo) 11,sum(tuhan) 12from tbl 13where d between '2017-07-01' and '2017-07-31' 14group by d2 asc,d asc with rollup 15

投稿2017/07/10 06:42

編集2017/07/10 08:08
yambejp

総合スコア114747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marshmallowy

2017/07/10 06:49

> 通常週の集計は、日曜もしくは月曜から始まった一週間で集計しますが > 今回のケースのように土曜日から集計するので間違いないでしょうか? いいえ、曜日ではなく月の1日からになります。 > 7/18はデータ0,0ですがこの場合もデータは存在するのでしょうか? > それともデータはないけど7/18のカレンダーを元に0,0を表示するのでしょうか? MySQLデータベース側でNULLのとき0を返すように指定してます。 ご確認の程、よろしくお願い申し上げます。
yambejp

2017/07/10 07:19

sample追記しておきました
marshmallowy

2017/07/10 08:17

ご丁寧に対応していただき、誠にありがとうござます。 本件を解決することができました。 また、お気遣いなども頂きありがとうござます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問