如何在不使用变量的情况下获取查询的第三个月?

时间:2016-11-08 00:05:42

标签: sql

我有一个查询,我需要使用SQL获取给定报告日期的第三个月,然后将其用作查询的一部分。我能够得到所有的月份,但我特别需要得到第三个月我将如何做到这一点?我知道在其他语言中这很容易,但在SQL中是否可行?

SELECT REPORTING_MONTH, COUNT(*)
FROM database1 AS fb
    JOIN (
        --derrived core set
        SELECT service_no, subscription_id
        FROM database2 
        WHERE REPORTING_MONTH = '2015-04-01' <-- this is the reporting month
    ) AS c
    ON fb.SERVICE_NO = c.service_no
    AND fb.subscription_id = c.subscription_id
    AND fb.REPORTING_MONTH = '2015-07-01' <-- THIS SHOULD BE THE THIRD MONTH
    AND fb.ACTIVE_BASE_IND_NEW = 1
GROUP BY 1
ORDER BY 1

例如,如果报告月份为2015-04-01,那么我需要变量月份,然后才能进入2015-07-01&#39;用作查询的一部分

2 个答案:

答案 0 :(得分:0)

如果字段REPORTING_MONTH是文本,那么您可能必须使用SUBSTRING(SQL Server)或MID(其他)。

如果它是一个正确的日期字段,那么DATEPART(month, fb.REPORTING_MONTH) = 3可能会起作用吗?

我的SQL有点生疏,但尝试这些功能。

答案 1 :(得分:0)

您没有指定您正在使用的数据库。一种典型的方法是:

SELECT REPORTING_MONTH, COUNT(*)
FROM database1 fb JOIN
     database2 c
     ON fb.SERVICE_NO = c.service_no AND
        c.REPORTING_MONTH = '2015-04-01' AND
        fb.subscription_id = c.subscription_id AND
        fb.REPORTING_MONTH = c.reporting_month + interval '3 month' AND
        fb.ACTIVE_BASE_IND_NEW = 1
GROUP BY 1
ORDER BY 1;

+ interval '3 month'的确切语法因数据库而异。