2017-07-31 22 views
1

我正在嘗試編寫一個查詢以返回當月的最新月份數據以及過去一年。
含義我需要從2017-07-012017-07-26以及2016-07-012016-07-26之間的數據。SQL月份YTD和之前的YTD數據

然而,我的查詢目前從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 

回答

0

我會是這樣的:

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 

當你想引用到MTD NOW()您可以使用:

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 

我從查詢中刪除了日期,以便按月份和年份分組。

+0

非常感謝你!我必須使用DAY(NOW() - 1),因爲它返回的數據更多。即今天(8/1)我得到的數據高達8/2與0值。 SELECT年 ,月 ,SUM(銷售) 從salesdata.sales --Selecting是天範圍內同月 WHERE DAY(日期)介於1和DAY(NOW() - 1) AND月= MONTH(NOW()) 和年份(YEAR(NOW()),YEAR(NOW()) - 1) --group按年,月 GROUP BY YEAR ,MONTH – George

+0

歡迎您! – flxplzk

+0

要添加一件事:爲了簡化在stackoverflow上正確答案的搜索:如果答案是正確的,請將其標記爲正確。這有助於其他人也能夠更快地找到答案。關於 – flxplzk