【问题标题】:SQL Month YTD and prior YTD dataSQL Month YTD 和之前的 YTD 数据
【发布时间】:2018-01-07 13:35:58
【问题描述】:

我正在尝试编写一个查询来返回当前年份和上一年的月初至今数据。
这意味着我需要从2017-07-012017-07-26 以及2016-07-012016-07-26 的数据。

但是,我的查询当前返回从 2017-07-012017-07-26 的数据(正确),但也返回从 2016-07-012016-07-31 的数据(不正确)。

如何获得两个不同年份的同一时间段 (MTD) 的数据?

该表包括dateday in quarteryearquartermonthweek,但没有日期列...

SELECT
    data_up_to,
    date,
    year,
    month,
    sum(sales)
FROM
    salesdata.sales
WHERE
    MONTH = MONTH(NOW()) and 
    YEAR in (YEAR(NOW()), YEAR(NOW())-1, YEAR(NOW())-2) and
    date <= data_up_to

【问题讨论】:

    标签: sql date dbvisualizer


    【解决方案1】:

    我会这样:

    SELECT   year
           , month
           , sum(sales)
    
    from     salesdata.sales
    
    --Selecting were day in range with same month
    WHERE    DAY(date) BETWEEN 1 AND DAY(data_up_to)
    AND      MONTH = MONTH(NOW()) 
    AND      YEAR IN (YEAR(NOW()), YEAR(NOW())-1)
    
    --Group by Year, Month 
    GROUP BY YEAR 
           , MONTH
    

    当你想引用NOW()的MTD时你可以使用:

    SELECT   year
           , month
           , sum(sales)
    
    from     salesdata.sales
    
    --Selecting were day in range with same month
    WHERE    DAY(date) BETWEEN 1 AND DAY(NOW())
    AND      MONTH = MONTH(NOW())
    AND      YEAR IN (YEAR(NOW()), YEAR(NOW())-1)
    
    --Group by Year, Month 
    GROUP BY YEAR 
           , MONTH
    

    我从查询中删除了日期,以便按月和年进行分组。

    【讨论】:

    • 非常感谢!我不得不使用 DAY(NOW()-1) 因为它返回更多数据。即今天(8/1)我得到的数据高达 8/2,值为 0。 SELECT year , month , sum(sales) from salesdata.sales -- 选择同月范围内的日期 WHERE DAY(date) BETWEEN 1 AND DAY(NOW()-1) AND MONTH = MONTH(NOW()) AND YEAR IN (YEAR(NOW()), YEAR(NOW())-1) -- 按年分组,按年分组,按月分组
    • 要补充一点:为了简化在 stackoverflow 上搜索正确答案的过程:如果答案正确,则将其标记为正确。这有助于其他有类似问题的人更快地找到答案。问候
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多