Vergleichen Sie Datumsangaben in SQL mit Zeilen aus demselben Zeitraum des letzten Jahres.
P粉821231319
2023-08-02 22:49:52
<p>我有一个数据库,其中包含订单日期、产品代码和客户,就像这个例子一样:</p>
<table class="s-table">
<thead>
<tr>
<th style="text-align:center;">Index</th>
<th style="text-align:center;">code</th>
<th style="text-align:center;">customer</th>
<th style="text-align:center;">order_date</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center;">1</td>
<td style="text-align:center;">CCC</td>
<td style="text-align:center;">C</td>
<td style="text-align:center;">2018-01-01</td>
</tr>
<tr>
<td style="text-align:center;">2</td>
<td style="text-align:center;">AAA</td>
<td style="text-align:center;">A</td>
<td style="text-align:center;">2020-01-01</td>
</tr>
<tr>
<td style="text-align:center;">3</td>
<td style="text-align:center;">CCC</td>
<td style="text-align:center;">C</td>
<td style="text-align:center;">2021-02-02</td>
</tr>
<tr>
<td style="text-align:center;">4</td>
<td style="text-align:center;">CCC</td>
<td style="text-align:center;">C</td>
<td style="text-align:center;">2021-03-03</td>
</tr>
<tr>
<td style="text-align:center;">5</td>
<td style="text-align:center;">DDD</td>
<td style="text-align:center;">A</td>
<td style="text-align:center;">2022-04-04</td>
</tr>
<tr>
<td style="text-align:center;">6</td>
<td style="text-align:center;">FFF</td>
<td style="text-align:center;">F</td>
<td style="text-align:center;">2023-05-05</td>
</tr>
<tr>
<td style="text-align:center;">7</td>
<td style="text-align:center;">FFF</td>
<td style="text-align:center;">F</td>
<td style="text-align:center;">2023-08-08</td>
</tr>
</tbody>
</table>
<p>我需要一个查询来列出所有订单,在订单日期之前的去年中,没有相同产品代码和客户的订单。在这个例子中,期望的输出将是:</p>
<table class="s-table">
<thead>
<tr>
<th style="text-align:center;">Index</th>
<th style="text-align:center;">code</th>
<th style="text-align:center;">customer</th>
<th style="text-align:center;">order_date</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center;">1</td>
<td style="text-align:center;">CCC</td>
<td style="text-align:center;">C</td>
<td style="text-align:center;">2018-01-01</td>
</tr>
<tr>
<td style="text-align:center;">2</td>
<td style="text-align:center;">AAA</td>
<td style="text-align:center;">A</td>
<td style="text-align:center;">2020-01-01</td>
</tr>
<tr>
<td style="text-align:center;">3</td>
<td style="text-align:center;">CCC</td>
<td style="text-align:center;">C</td>
<td style="text-align:center;">2021-02-02</td>
</tr>
<tr>
<td style="text-align:center;">5</td>
<td style="text-align:center;">DDD</td>
<td style="text-align:center;">A</td>
<td style="text-align:center;">2022-04-04</td>
</tr>
<tr>
<td style="text-align:center;">6</td>
<td style="text-align:center;">FFF</td>
<td style="text-align:center;">F</td>
<td style="text-align:center;">2023-05-05</td>
</tr>
</tbody>
</table>
<p>如果您查看索引号为4和7的行,您会发现在过去的一年中,还有另一行具有相同的代码和客户信息。<br /><br />在MySQL中如何实现这一点呢?</p><p><br /></p>
您可以尝试像这样查询:
select *,YEAR(order_date) as order_year from YOUR_TABLE group by code,customer,order_year;