Select 查询特定年月范围内的数据过滤

Select query for filtering data from particular range of year and month

我想显示用户 selected 年的三月到下一年的四月的数据(例如:如果用户 selected 2017,则需要 select 来自的数据2017年3月至2018年4月)。过滤它的最佳查询是什么。它应该从 selected 年开始订购。

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)

如果您已经有了开始的月份和日期,那么我不明白为什么您不能在 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)

好吧,SQL 服务器的更高版本 (2012+) 有一个很好的内置函数,叫做 datefromparts。但是,由于您的问题带有 标记,除非您可以升级数据库(您真的应该考虑一下,因为 Microsoft 不再支持 2005),否则这并没有多大帮助。

但是,既然您知道您需要明年 3 月到 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 值提供。)