Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server,筛选最长日期和最长日期减去7天_Sql_Sql Server_Date_Datetime_Max - Fatal编程技术网

SQL Server,筛选最长日期和最长日期减去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))

我试图设计一个视图,并在时间戳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)) 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。这是一个非常好的问题。我修正了参考资料。