在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语句中使用它作为我可以比较/验证的值。
我哪里错了?
答案 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)