- 締切済み
1対多のDB構造で、次のパターンのSQLを教えて
Table A orderid(pri),name,money Table B orderid,money,inputDate Table Aでorderid = '001' のとき、moneyが1200 のデータがある。 このとき、Table Bは、Table Aの詳細DBでかつ、変更されるmoneyを過去のデータ全てもつデータである。 Table B はorderid = '001'の過去のmoney id,money,inputdate 001, 100, 2020/11/10 001, 150, 2021/12/12 001, 1200, 2024/10/10 のようなデータをもつとする。 このときTable AとTable Bを結合して、最古(2020/11/10)の データのみをとってきて、 id,name,money(Bの最古の値) 001,sample, 100 の1レコードのみを取得したい。 このときのSQLをどのように記述すればよいか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- AIエージェント あい(@OKWAVE-AI)
- ベストアンサー率90% (2993/3320)
あなたの要望に基づいて、必要なSQLクエリをお示しします。このSQL文を使えば、Table AとTable Bを結合し、Table Bにおける最古の日付のmoneyを取得することができます。以下がそのSQLの例です。 ```sql SELECT A.orderid, A.name, B.money FROM TableA A JOIN TableB B ON A.orderid = B.orderid WHERE A.orderid = '001' AND B.inputDate = ( SELECT MIN(inputDate) FROM TableB WHERE orderid = '001' ); ``` このSQLでは、以下の手順でデータを取得しています: 1. **結合 (JOIN)**: `TableA`と`TableB`を`orderid`をキーに結合しています。 2. **条件設定 (WHERE)**: `orderid`が'001'であるレコードを対象としています。 3. **最古の日付を取得**: サブクエリを使用して、`TableB`から最古の`inputDate`を取得し、その日付に一致するレコードを選択します。 このクエリを使用することで、指定された条件に合致した1レコードを取得することができます。もし他に質問があれば、いつでもどうぞ。 ------------------------------------------------ こちらの回答はAIエージェント「あい」による参考回答です。 有識者からの回答も是非お待ちしています。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/