2017-06-05 47 views
0

我想顯示用戶選擇年份3月到明年4月的數據(例如:如果用戶選擇2017年,則需要選擇從2017年3月到4月的數據2018年)。過濾它的最佳查詢是什麼?它應該是從所選年份開始的順序。選擇查詢過濾來自特定年份和月份的數據

SELECT DATEPART(mm,submitted_date),SUM(total_count),YEAR(submitted_date) 
FROM store_details 
WHERE YEAR(submitted_date) = '2017' 
AND MONTH(submitted_date) >=3 
Group By YEAR(submitted_date),DATEPART(mm,submitted_date) 
Order By YEAR(submitted_date),DATEPART(mm,submitted_date) 

回答

0

那麼,SQL Server的更高版本(2012+)有一個很好的內置函數,稱爲datefromparts。但是,由於您的問題被標記爲,除非您可以升級您的數據庫(並且您真的應該考慮它,自2005年以來不再受Microsoft支持),否則這並沒有多大幫助。

但是,因爲你知道你想要的所有三月和次年4月之間的數據,你可以簡單地這樣做:

SELECT DATEPART(MONTH,submitted_date),SUM(total_count),YEAR(submitted_date) 
FROM store_details 
WHERE submitted_date >= CAST(CAST(@Year as char(4)) + '-03-01 00:00:00' As datetime) 
WHERE submitted_date < CAST(CAST(@Year + 1 as char(4)) + '-04-01 00:00:00' As datetime) 

Group By YEAR(submitted_date),DATEPART(MONTH,submitted_date) 
Order By YEAR(submitted_date),DATEPART(MONTH,submitted_date) 

(也就是說,假設用戶提供了一年的int值。 )

+0

在'CAST'附近顯示語法不正確,預計'AS'。@ Year在參數化查詢中作爲2017傳遞 – user2431727

+0

我已經很快關閉括號。現在試試。 –

+0

明白了。請更正與答案在哪裏。 WHERE submitted_date> = CAST(CAST(@Year as char(4))+'-03-01 00:00:00'as datetime) AND submitted_date user2431727

0

如果你已經在手的起始月份和日期,那麼我不明白爲什麼你不能只是增加一個上限的日期在WHERE條款:

SELECT 
    DATEPART(mm, submitted_date), 
    SUM(total_count), 
    YEAR(submitted_date) 
FROM store_details 
WHERE 
    (YEAR(submitted_date) = '2017' AND MONTH(submitted_date) >= 3) AND 
    (YEAR(submitted_date) = '2018' AND MONTH(submitted_date) < 4) 
GROUP BY 
    YEAR(submitted_date), 
    DATEPART(mm, submitted_date) 
ORDER BY 
    YEAR(submitted_date), 
    DATEPART(mm, submitted_date)