Générer un tableau dynamique de tous les mois entre deux dates
P粉663883862
2023-08-28 12:44:46
<p>我有一个如下所示的表:</p>
<table class="s-table">
<tête>
<tr>
<th>姓名</th>
<th>INT_VALUE</th>
<th>开始</th>
<th>FIN</th>
≪/tr>
≪/tête>
<corps>
<tr>
<td>一个</td>
<td>100</td>
<td>2013-11-16</td>
<td>2014-11-16</td>
≪/tr>
</tcorps>
</tableau>
<p>目标是输出如下:</p>
<table class="s-table">
<tête>
<tr>
<th>姓名</th>
<th>INT_VALUE</th>
<th>开始</th>
<th>FIN</th>
<th>间隔</th>
≪/tr>
≪/tête>
<corps>
<tr>
<td>一个</td>
<td>100</td>
<td>2013-11-16</td>
<td>2014-11-16</td>
<td>11-2013</td>
≪/tr>
<tr>
<td>一个</td>
<td>100</td>
<td>2013-11-16</td>
<td>2014-11-16</td>
<td>2013年12月</td>
≪/tr>
<tr>
<td>一个</td>
<td>100</td>
<td>2013-11-16</td>
<td>2014-11-16</td>
<td>1-2014</td>
≪/tr>
<tr>
<td>一个</td>
<td>100</td>
<td>2013-11-16</td>
<td>2014-11-16</td>
<td>2014年2月</td>
≪/tr>
</tcorps>
</tableau>
<p>的开始和结束。</p>
<pre class="brush:php;toolbar:false;">SELECT START, calendrier, COUNT(1)
DE table1 AS t1
RIGHT JOIN (SELECT row_number() OVER (ORDER BY SEQ4()) AS MOIS
, TO_DATE(DATEADD(MOIS, MOIS, '2019-05-01')) AS calendrier
DEPUIS TABLE(GÉNÉRATEUR(rowcount=>80)))
ON t1.START = calendrier
GROUPER PAR 1, 2
COMMANDER PAR 2, 1
;</pré>
<p>
Déplacé
数字范围
dans son propre CTE pour séparer les choses, nous avons maintenant une grande liste de 80 numéros (probablement plus grande).Ensuite, nous trouvons le nombre de mois entre début/fin et joignons le même nombre de lignes. Faites ensuite le calcul pour convertir la plage en sélection :
Une autre option consiste à créer une table de dates à long terme
Ensuite, nous utilisons BETWEEN pour obtenir les valeurs incluses dans la plage (début, fin), qui devient :
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=bdd028a7755fdcb8296df2301baeb295
Si vous ne voulez pas que le mois ait des zéros non significatifs, utilisez le modèle
'%c-%Y'
.