2 つの日付間のすべての月の動的なテーブルを生成します
P粉663883862
P粉663883862 2023-08-28 12:44:46
0
2
576
<p>次のようなテーブルがあります: </p> <テーブルクラス="s-テーブル"> <頭> <tr> <th>名前</th> <th>INT_VALUE</th> <th>開始</th> <th>END</th> </tr> </頭> <みんな> <tr> <td>a</td> 100 2013-11-16 2014-11-16 </tr> </tbody> </テーブル> <p>目標は以下を出力することです: </p> <テーブルクラス="s-テーブル"> <頭> <tr> <th>名前</th> <th>INT_VALUE</th> <th>開始</th> <th>END</th> 間隔 </tr> </頭> <みんな> <tr> <td>a</td> 100 2013-11-16 2014-11-16 2013 年 11 月 </tr> <tr> <td>a</td> 100 2013-11-16 2014-11-16 2013 年 12 月 </tr> <tr> <td>a</td> 100 2013-11-16 2014-11-16 2014 年 1 月 </tr> <tr> <td>a</td> 100 2013-11-16 2014-11-16 2014 年 2 月 </tr> </tbody> </テーブル> <p>これを使い始めました。しかし、テーブル内の開始日と終了日を使用して、計算間の月のリストの開始日と終了日を決定する方法がわかりません。 </p> <pre class="brush:php;toolbar:false;">SELECT START、カレンダー、COUNT(1) FROM テーブル 1 AS t1 RIGHT JOIN (SELECT row_number() OVER (ORDER BY SEQ4()) AS MONTHS , TO_DATE(DATEADD(MONTH, MONTHS, '2019-05-01')) AS カレンダー FROM TABLE(GENERATOR(rowcount=>80))) ON t1.START = カレンダー 1、2でグループ化 2、1までにご注文ください ;</pre> <p>ここでの目標は、範囲の開始と終了の間の各月に int 値を関連付けることです。 </p>
P粉663883862
P粉663883862

全員に返信(2)
P粉924915787

数値範囲 を独自の CTE に移動して分離しました。これで、80 個の数値 (おそらくこれよりも大きい) の大きなリストができました。

次に、開始/終了間の月数を見つけて、同じ数の行を連結します。次に、計算を行って範囲を選択範囲に変換します。 リーリー

別のオプションは、長期にわたる日付テーブルを作成することです

リーリー

次に、

BETWEEN を使用して (開始、終了) 範囲に含まれる値を取得します。これは次のようになります。 リーリー

いいねを押す +0
P粉567112391

リーリー

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=bdd028a7755fdcb8296df2301baeb295

月の先頭にゼロを付けたくない場合は、'%c-%Y' パターンを使用します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート