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
。但是,由于您的问题带有 sql-server-2005 标记,除非您可以升级数据库(您真的应该考虑一下,因为 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 值提供。)
我想显示用户 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
。但是,由于您的问题带有 sql-server-2005 标记,除非您可以升级数据库(您真的应该考虑一下,因为 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 值提供。)