SQL Server,筛选最长日期和最长日期减去7天
我试图设计一个视图,并在时间戳datetime上应用几个条件:last date和last date减去7天。 这在最后一个日期可以正常工作:SQL Server,筛选最长日期和最长日期减去7天,sql,sql-server,date,datetime,max,Sql,Sql Server,Date,Datetime,Max,我试图设计一个视图,并在时间戳datetime上应用几个条件:last date和last date减去7天。 这在最后一个日期可以正常工作: SELECT * FROM table WHERE timestamp = (SELECT MAX(timestamp) FROM table) 到目前为止,我还不知道如何加上-7天 例如,我试过了 SELECT * FROM table WHERE (timestamp = (SELECT MAX(timestamp) FROM table))
SELECT *
FROM table
WHERE timestamp = (SELECT MAX(timestamp) FROM table)
到目前为止,我还不知道如何加上-7天
例如,我试过了
SELECT *
FROM table
WHERE (timestamp = (SELECT MAX(timestamp) FROM table)) OR (timestamp = (SELECT DATEADD(DAY, -7, MAX(timestamp)) FROM table)
还有一些其他的变化,包括GETDATE而不是MAX,但是,我得到了执行超时消息
请让我知道在这种情况下我应该遵循什么逻辑
所以我只想获取2019年11月29日和2019年11月22日的行的数据。我对过滤因子有一个额外的要求,但这是一个简单的要求 如果您关心日期,那么您可能希望:
select t.*
from t cross join
(select max(timestamp) as max_timestamp from t) tt
where (t.timestamp >= convert(date, max_timestamp) and
t.timestamp < dateadd(day, 1, convert(date, max_timestamp))
) or
(t.timestamp >= dateadd(day, -7, convert(date, max_timestamp)) and
t.timestamp < dateadd(day, -6, convert(date, max_timestamp))
);
所以我最终得到了下一个代码:
SELECT *
FROM table
WHERE (timestamp >= CAST(DATEADD(DAY, - 1, GETDATE()) AS datetime)) AND (timestamp < CAST(GETDATE() AS DATETIME)) OR
(timestamp >= CAST(DATEADD(DAY, - 8, GETDATE()) AS datetime)) AND (timestamp < CAST(DATEADD(day, - 7, GETDATE()) AS DATETIME)) AND (Factor1 = 'Criteria1' OR
Factor2 = 'Criteria2')
不确定这是最好的还是最优雅的解决方案,但它对我很有效 样本数据和期望的结果会有所帮助。谢谢,但请您澄清一下,什么是tt,如果以后没有引用它,为什么要交叉加入max_时间戳?还有,日期。。。似乎对我不起作用,我想我需要使用varchar103,但这让我很困惑,因为在dateadd day中已经指定了,转换它的原因是什么?@ako。这是一个非常好的问题。我修正了参考资料。