SQL 检索每月数据的查询
SQL Query to Retrieve Monthly Data
我在 Redash 中使用以下 SQL 查询,该查询从 table.
检索每月数据
SELECT *
FROM Table
WHERE
"Date" between '2021-04-01T00:00:00.669976+00:00' and '2021-04-30T23:59:59.669976+00:00'
我想知道是否有一种解决方法可以有效地更新 WHERE
子句,而不是在每个月底手动输入它。
对于您的情况,我建议您避免任何涉及使用 GRP_Date
字段进行 convert
或其他类型转换的解决方案。通过这样做,您不允许 SQL 服务器能够使用索引,如果 GRP_Date
字段有一个索引,这会以非常明显的方式影响您的性能。
当然,由于您的问题中已经提到的原因,between
在这种特定情况下并不理想。
我建议以下条件以获得最佳性能(充分利用索引)并避免时间问题
where GRP.GRP_date >= @since
and GRP.GRP_date < dateadd(day, 1, @until) -- @until + 1 day
在以下情况下:
@since = 2016-11-01
@until = 2016-11-14
where GRP.GRP_Fecha >= '2016-11-01'
and GRP.GRP_Fecha < '2016-11-15'
订购 2016-11-15
之前的日期时,这包括 2016-11-14
之后的所有日期,而不考虑时间。
这对我来说效果很好:
WHERE
EXTRACT(MONTH FROM "Date") = EXTRACT(MONTH FROM CURRENT_DATE) AND EXTRACT(YEAR FROM "Date") = EXTRACT(YEAR FROM CURRENT_DATE)
我在 Redash 中使用以下 SQL 查询,该查询从 table.
检索每月数据SELECT *
FROM Table
WHERE
"Date" between '2021-04-01T00:00:00.669976+00:00' and '2021-04-30T23:59:59.669976+00:00'
我想知道是否有一种解决方法可以有效地更新 WHERE
子句,而不是在每个月底手动输入它。
对于您的情况,我建议您避免任何涉及使用 GRP_Date
字段进行 convert
或其他类型转换的解决方案。通过这样做,您不允许 SQL 服务器能够使用索引,如果 GRP_Date
字段有一个索引,这会以非常明显的方式影响您的性能。
当然,由于您的问题中已经提到的原因,between
在这种特定情况下并不理想。
我建议以下条件以获得最佳性能(充分利用索引)并避免时间问题
where GRP.GRP_date >= @since
and GRP.GRP_date < dateadd(day, 1, @until) -- @until + 1 day
在以下情况下:
@since = 2016-11-01
@until = 2016-11-14
where GRP.GRP_Fecha >= '2016-11-01'
and GRP.GRP_Fecha < '2016-11-15'
订购 2016-11-15
之前的日期时,这包括 2016-11-14
之后的所有日期,而不考虑时间。
这对我来说效果很好:
WHERE
EXTRACT(MONTH FROM "Date") = EXTRACT(MONTH FROM CURRENT_DATE) AND EXTRACT(YEAR FROM "Date") = EXTRACT(YEAR FROM CURRENT_DATE)