我有一张桌子,有人每天都会更新这张桌子。
我想创建一个视图,而不是手动更新此视图,就像那个人一样,我想让它自动化。
例如,今天是15 / jun / 2012并且表格已更新,当该人员自动更新表格时,必须更新视图(运行时)。
我的麻烦是如何让一个月的第一天到最后一天更新表格。
答案 0 :(得分:1)
表格更新的最后一天必须是今天,对吗?该表是否会比今天晚些时候包含数据?如果没有,那么你可以说“WHERE> =本月初”,对吧?您可以使用各种字符串转换和连接技巧获取当前月份的开头,但我喜欢的方法是坚持日期数学:
SELECT [First day of this month] =
DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101');
因此,在您看来,您可以使用此where子句将其限制为自当月开始以来的数据:
WHERE date_col >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101')
如果您需要立即排除数据,可以添加:
AND date_col < CURRENT_TIMESTAMP
修改强>
您的问题表示该表每天都会更新。如果这实际上不是真的,并且您需要从表实际更新的最后一个月开始,您可以将上面的内容更改为:
WHERE date_col >= (SELECT DATEADD(MONTH,
DATEDIFF(MONTH, '19000101', MAX(date_modified)),
'19000101') FROM dbo.your_table)
答案 1 :(得分:0)
如果我正确地理解了您的问题,您需要检查您的表格到上次修改日期并获得当月的第一天吗?
如果这是真的,你需要像:
DECLARE @maxdate DATETIME
SELECT @maxdate = MAX(ModifiedDate) FROM [yourTable]
SELECT DATEADD(DAY, (DAY(@maxdate) - 1)*(-1), @maxdate)