如果我没有`period`字段,应该如何调整查询来包括上期和同期?
时间: 2024-10-17 16:07:18 浏览: 32
如果没有`period`字段,你可以在SQL查询中直接使用两个时间点来表示上期和同期。例如,如果你想对比的是每个月的第一天作为基准(即每月1日为当月的开始,同理上月的最后一天为上月的结束),可以这样做:
```sql
WITH this_month AS (
SELECT
DATE_TRUNC('MONTH', fact_date) AS fact_date,
...其他列...
FROM
v_spd_receive_qy
WHERE
fact_date BETWEEN to_date('2024-09-01', 'yyyy-mm-dd') AND last_day(to_date('2024-09-30', 'yyyy-mm-dd'))
AND ...其他过滤条件...
),
last_month AS (
SELECT
DATE_TRUNC('MONTH', fact_date - INTERVAL '1 MONTH') + INTERVAL '1 DAY' AS prev_fact_date, -- 上个月的最后一天加1,因为我们要包括当月第一天
...其他列...
FROM
this_month
WHERE
fact_date = last_day(to_date('2024-09-30', 'yyyy-mm-dd'))
),
same_month AS (
SELECT
DATE_TRUNC('MONTH', fact_date) AS same_fact_date,
...其他列...
FROM
this_month
)
SELECT
tms.fact_date AS current_month,
lms.prev_fact_date AS previous_month,
sms.same_fact_date AS same_month_date
FROM
this_month tms
LEFT JOIN
last_month lms
ON
tms.fact_date = lms.prev_fact_date
LEFT JOIN
same_month sms
ON
tms.fact_date = sms.same_fact_date
ORDER BY
fact_date;
```
这里,`this_month`代表本月,`last_month`是上个月的最后一天对应的数据,`same_month`则是同月份的所有数据。通过左连接的方式,你可以得到本月、上月以及本月同一天的数据。
阅读全文