ano*_*ous 4 sql t-sql sql-server sql-server-2008r2-express
我有一张表MonthlyShipments
看起来像:
partnumber | quantity | month | year |
part1 | 12 | 6 | 2011 |
part1 | 22 | 5 | 2011 |
part1 | 32 | 4 | 2011 |
part1 | 42 | 3 | 2011 |
part1 | 52 | 2 | 2011 |
Run Code Online (Sandbox Code Playgroud)
我想总结过去3个月的数量,不包括当月.我的where子句目前看起来像:
where
MonthlyShipments.Month <> MONTH(GETDATE()) AND
CAST(
(CAST(MonthlyShipments.Month as nvarchar(2)) +
'-01-' +
CAST(MonthlyShipments.Year as nvarchar(4))) as DateTime)
> DATEADD(m, -4, GETDATE())
Run Code Online (Sandbox Code Playgroud)
它有效,但它的丑陋和侮辱.有什么建议使它更漂亮?非常感谢!
好多了......
DATEDIFF(
month,
DATEADD(Year, MonthlyShipments.Year-1900,
DATEADD(Month, MonthlyShipments.Month-1, 0)
),
GETDATE()
) BETWEEN 1 AND 3
Run Code Online (Sandbox Code Playgroud)
但是嵌套的DATEADD可以成为计算和索引的列
ALTER TABLE MonthlyShipments ADD
ShipDate AS DATEADD(Year, MonthlyShipments.Year-1900,
DATEADD(Month, MonthlyShipments.Month-1, 0)
)
Run Code Online (Sandbox Code Playgroud)
这使
WHERE DATEDIFF(month, ShipDate, GETDATE()) BETWEEN 1 AND 3
Run Code Online (Sandbox Code Playgroud)