SELECT SUBEMENT WITH SUBQUERY date - 30天

时间:2014-06-03 23:25:40

标签: sql sql-server sql-server-2012

在SQL Server 20112中,我需要从dbo.table中选择 行ID ,其中日期比最后一条记录的日期早30天(最后一条记录不一定是今天的日期!)。

SO ....

获取正确日期的子查询如下:

SELECT cast(max(table_time) - 30 as datetime) 
FROM dbo.table 
WHERE column_value = 105

这只返回一个[date]值作为字符串'2014-02-03 ....'

接下来,我将此子查询用作父SELECT语句的子查询:

SELECT max(row_id) 
FROM dbo.table 
WHERE table_time = (SELECT cast(max(table_time) - 30 as datetime) 
                    FROM dbo.table 
                    WHERE column_value = 105)

...但这不会返回我正在寻找的row_id(它会返回NULL)。我尝试按如下方式转换日期,但得到了相同的NULL结果

SELECT max(row_id) 
FROM dbo.table 
WHERE table_time = cast((SELECT cast(max(table_time) - 30 as datetime) 
                         FROM dbo.table 
                         WHERE column_value = 105) as datetime)

我想如果子查询返回一个有效的日期值,我应该可以在父select语句中使用它作为我可以比较/验证的值。

我哪里错了?

1 个答案:

答案 0 :(得分:1)

---使用'演员'功能在'其中'条款

      SELECT max(row_id) FROM dbo.table 
      WHERE cast(table_time  as datetime)=       
      (SELECT cast(max(table_time) - 30 as datetime) 
       FROM dbo.table WHERE column_value = 105)