在SQL中查询上年同期数据,通常需要用到日期函数来计算。以下是一个基本的示例,说明如何查询上一年同期的数据。假设我们有一个名为`sales`的表,其中有一个名为`sale_date`的日期字段,表示销售日期。
```sql
SELECT
,
DATE_FORMAT(DATE_SUB(sale_date, INTERVAL 1 YEAR), '%Y-%m-%d') AS last_year_date
FROM
sales
WHERE
sale_date BETWEEN DATE_FORMAT(NOW(), '%Y-01-01') AND DATE_FORMAT(NOW(), '%Y-12-31')
AND DATE_FORMAT(sale_date, '%m-%d') = DATE_FORMAT(NOW(), '%m-%d');
```
这段SQL代码做了以下几件事情:
1. 使用`DATE_SUB`函数从当前日期减去1年,得到上一年同一天的日期。
2. 使用`DATE_FORMAT`函数格式化日期,使其仅显示年月日,以便比较。
3. 在`WHERE`子句中,我们首先筛选出当前年份的销售记录。
4. 然后进一步筛选出与当前日期月份和日期相同的记录,即上一年同期的销售记录。
如果你使用的是SQL Server,日期函数的写法可能会有所不同:
```sql
SELECT
,
DATEADD(year, -1, sale_date) AS last_year_date
FROM
sales
WHERE
sale_date BETWEEN DATEADD(month, 0, CAST(GETDATE() AS date)) AND DATEADD(month, -1, CAST(GETDATE() AS date))
AND MONTH(sale_date) = MONTH(GETDATE())
AND DAY(sale_date) = DAY(GETDATE());
```
在这个例子中,`DATEADD`函数用于计算上一年同一天的日期,而`GETDATE()`函数用于获取当前日期和时间。`MONTH`和`DAY`函数用于获取日期的月份和日。
请根据你使用的具体数据库系统(如MySQL、PostgreSQL、SQL Server等)调整上述代码。