我想知道是否有更有效的方法来获得以下情形。 检查数据集
https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=e18a8c1200c8eac1f3bdca184075358e
无论何时,我都需要使用getdate函数作为基线来获取上个月的数据。 请提出任何建议。
答案 0 :(得分:0)
-- using datediff
select * from aaa
where datediff(MONTH,aaa.trandate,getdate()) = 1
答案 1 :(得分:0)
最有效的方法是直接进行日期比较:
where trandate < datefromparts(year(getdate()), month(getdate()), 1) and
trandate >= dateadd(month, -1, datefromparts(year(getdate()), month(getdate()), 1))
这使优化器可以使用基于trandate
的索引和分区。此外,对于trandate
而言,统计信息更准确-并且功能阻碍了统计信息的使用。