テーブル(A) テーブル(B)
ID --- 111 ID ---111
生年月日 --- 2007/02/18 日付 --2008/10/3
テーブル(A)には、ID、生年月日があります。
テーブル(B)には、ID、日付があります。
テーブル(A)の生年月日とテーブル(B)の日付を計算し
表示したいと考えていますが、うまく行きません…。
やりたい事としては、テーブル(B)の値とテーブル(A)の値を計算し
2008 - 2007 = 1なので1才と表示し、
10 - 02 = 8なので、8ヶ月と表示したいと考えています。
やり方として一番どのようなやり方が
キレイなSQLを書けるのでしょうか?
一応http://ayuayuayu01.seesaa.net/article/106439889. …を参考にして
やるか、またはSUBSTRで行う方法をイメージしています。
出来れば1回で実行したいので、SUBSTRは向いていないのかなぁっと思っています。
No.3ベストアンサー
- 回答日時:
実態に則さないサンプルを示すと、こういった問題が起こります。
select
trunc(
months_between(
to_date(max(b.日付),'yyyy/mm/dd'),
to_date(a.生年月日,'yyyy/mm/dd')
) / 12
) 年齢,
trunc(
mod(
months_between(
to_date(max(b.日付),'yyyy/mm/dd'),
to_date(a.生年月日,'yyyy/mm/dd')
),12
)
) 月
from a inner join b on a.id=b.id
group by a.id,a.生年月日
;
な感じじゃないかと想像しますが。
メッセージありがとうございます。
教えて頂いたやり方で無事出来るようになりました。
ありがとうございました。
もうちょと詳しくSQLを解読して見たいと思います。
No.2
- 回答日時:
mod関数を使って、ちょっとだけスマートに。
select
trunc(
months_between(
to_date(b.日付,'yyyy/mm/dd'),
to_date(a.日付,'yyyy/mm/dd')
) / 12
) 年齢,
trunc(
mod(
months_between(
to_date(b.日付,'yyyy/mm/dd'),
to_date(a.日付,'yyyy/mm/dd')
),12
)
) 月
from a inner join b on a.id=b.id
;
この回答への補足
Bテーブルの日付をMAXとして取得処理を行わないと
いけないため、ちょとSQLが自分ではわからなかったので
Viewを作成し、Aテーブル、Bテーブルの結合を行いました。
SELECT
TRUNC(
MONTHS_BETWEEN(
TO_DATE(MAX(生年月日),'YYYY/MM/DD'),
TO_DATE(日付,'YYYY/MM/DD')
) / 12
) 年齢,
TRUNC(
MOD(
TO_DATE(MAX(生年月日),'YYYY/MM/DD'),
TO_DATE(日付,'YYYY/MM/DD')
)*12
)
) 月
from VIEW_A;
今現在SQLでエラーになって原因が
わかりませんが、このようなSQLにしようかと思います。
もしよければアドバイスなど
よろしくお願い致します。
メッセージありがとうございます。
質問で細かく書いていないので
申し訳ないのですが、ASP.NETにて開発をしており
別の画面からIDを取得し、その取得したIDを元に
A,Bテーブルから取得する処理を行います。
Bテーブルから取得する日付は
IDに対する最大値を取得する事になります。
B(テーブル)
ID 日付
111 2008/10/03
111 2008/10/04 などの場合、2008/10/04を取得するため
MAX(日付)などが必要になり、また別の画面から取得した
IDを元に各テーブルから取得をするため
inner joinが使えないかも?しれません。
一度結合をし、WHERE ID = '取得したパラメータ'として
出来ればいいのですが。
環境がないので今は試せないのですが
参考にさせて頂き出来たら御礼をさせて頂きます。
No.1
- 回答日時:
きれいかどうかは別ですが
select
trunc(
months_between(
to_date(b.日付,'yyyy/mm/dd'),
to_date(a.日付,'yyyy/mm/dd')
) / 12
) 年齢,
trunc(
months_between(
to_date(b.日付,'yyyy/mm/dd'),
to_date(a.日付,'yyyy/mm/dd') ) )-
trunc(
months_between(
to_date(b.日付,'yyyy/mm/dd'),
to_date(a.日付,'yyyy/mm/dd')
) /12 ) * 12 月
from a inner join b on a.id=b.id
この回答への補足
Bテーブルの場合、MAX(日付)として
最大値を取得しなければいけないため
普通にSQLだと厳しいかと思い
Viewを使用し、AテーブルとBテーブルを結合しました。
SELECT
TRUNC(
MONTHS_BETWEEN(
TO_DATE(生年月日,'YYYY/MM/DD'),
TO_DATE(MAX(日付),'YYYY/MM/DD')
) / 12
) 才,
TRUNC(
MONTHS_BETWEEN(
TO_DATE(生年月日,'YYYY/MM/DD'),
TO_DATE(MAX(日付),'YYYY/MM/DD')) )-
TRUNC(
MONTHS_BETWEEN(
to_date(MAX(日付)'YYYY/MM/DD'),
to_date(生年月日,'YYYY/MM/DD')
) /12 ) * 12 月
FROM VIEW_A;
今現在エラーが出ていて理由がわかりませんが
こんな感じでSQLの処理を書こうかと思います。
もしよければ何かアドバイスがあれば
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Excel(エクセル) VLOOKUP 構造化参照について 1 2023/04/24 19:39
- MySQL 【MySQL】本当に困っています。詳しい方、ご教授よろしくお願いします。 1 2023/06/03 14:18
- PHP Q&Aサイトを作成していてURLの生成方法について迷っているのでアドバイスお願い致します 1 2023/08/10 16:42
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL Server で 翌月10日を取...
-
日付型カラムへのデータINSERT
-
SQL Sever での日付の差の求め...
-
PL/SQLにて勤務時間の計算
-
SQLエラーについて
-
エクセル上の 2017/10/27 7:01...
-
日付範囲を展開したレコードを...
-
Access VBAで行ラベルが定義さ...
-
Accessのマクロでモジュールを...
-
Accessの数値から時間に変換す...
-
Google Apps Script、onChange...
-
yyyy/M/dをyyyy/MM/ddに変換
-
ODBCリンクの際にACCESSでは読...
-
キャッシュを使わずにSELECTを...
-
エクセルVBA 今日の日付行...
-
Statement ignored というエラー
-
今日の日付が入った行のデータ...
-
日付型なら変数の先頭になん...
-
フォーム上で小計など自動計算...
-
或るプロシージャの呼び出し元判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL*Loaderでのsysdate使用
-
SQL*PLUSでの分秒までの表示の仕方
-
SQL*Loader フォーマット変換...
-
ALTER SESSIONについて
-
DB2でのシステム日付のinsert、...
-
日付型カラムへのデータINSERT
-
SQL Server で 翌月10日を取...
-
SQLです。下記の問合せを行うク...
-
to_date使用時に発生するエラー...
-
date型のインデックス
-
エクセル上の 2017/10/27 7:01...
-
EXCELでの時間計算(休憩時間の...
-
SQLエラーについて
-
SQL Sever での日付の差の求め...
-
(日付 - 日付)/数値
-
PL/SQLにて勤務時間の計算
-
date型へのinsertについて
-
実行エラー 3075:クエリ式`作...
-
yyy/mm/dd/形式
-
日付の範囲検索がしたい
おすすめ情報