eclipsで、JSPとJAVAを書いています。
DBは、MySQLです。
JAVAの中で、SQL文を書いているのですが、
抽出条件が難しくて、SQL文をかけません。
どのように記述すればよろしいでしょうか?
抽出したい条件は、
0.関数パラメーターで指定した会社IDの会社について、
1.2ヶ月前からの来訪者の、
2.来訪回数の多い順に、
3.来訪日の大きい順に、
4.来訪者でユニークになるように
5.TableAとTableBの全項目を
抽出する。
6.もうSQL文的に、この条件を入れるのは、無理だとは思いますが、ここ一ヶ月来社していない人は、除外したいです。
情報:
1.TableAとTableBの紐付けは、
TableB.tableA_id = TableA.tableA_id。
2.レコードで、delete_flag = trueのものは、除外(レコードの論理削除したという印なので)。
3.TableAは、顧客マスタ。=顧客マスタID=お客様でユニーク。お客様の会社IDの項目もあり。
4.TableBは、来訪マスタ。=お客様が来た回数分のレコード(顧客マスタIDと日付、その他を持っている。
5.TableBは、来訪マスタIDでユニーク。
6.TableBは、同じ顧客マスタIDが、複数存在する。=来訪回数分。
下記SQLへ与えるパラメーター:iPara_company_id 会社ID
動かないですが、イメージ的に雰囲気っぽいものを
下記に、書いてみました。
=========================================================
// 2ヶ月前からの、来訪者の、来訪回数の多い順に、来訪日の大きい順に、来訪者でユニークになるように抽出する。
"SELECT TableB., TableA."
- " FROM TableB JOIN TableA ON TableB.tableA_id = TableA.tableA_id" // TableAとBを連結
- " WHERE"
- " (TableA.company_id = " + iPara_company_id + ")" // 会社ID
- " AND (TableB.delete_flag = false)"
- " AND (TableA.delete_flag = false)"
// 2ヶ月前からの来訪者を、最新の来訪日で、一意で取り出す。
- " AND (TableB.tableA_id, TableB.date)"
- " IN ("
- " SELECT TableB.tableA_id, max(TableB.date) FROM TableB"
- " WHERE TableB.date > DATE_ADD (CURRENT_DAY, INTERVAL -2 MONTH)"// 2ヶ月前より
- " GROUP BY TableB.tableA_id" // 来訪者ID
- " )"
// 2ヶ月前からの来訪者の、来訪数をカウントし、多い順で、一意で取り出す。
-
" AND COUNT(TableB.tableA_id) AS visitCount"
-
" IN ("
-
" SELECT COUNT(TableB.tableA_id) FROM TableB"
-
" WHERE TableB.date > DATE_ADD (CURRENT_DAY, INTERVAL -2 MONTH)"// 2ヶ月前より
-
" ORDER BY visitCount DESC" // 来訪数が大きい順
-
" GROUP BY TableB.tableA_id" // 来訪者ID
-
" )"
-
" ORDER BY TableB.date DESC"; // 来訪日が大きい順
========================================================
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。