在运算符之间使用子查询

时间:2012-03-21 07:30:22

标签: sql-server tsql

全部,

我的查询是

select * from [order] where createdon<getdate()-7
and orderid between 
(select top 1 orderid from [order] where createdon<getdate()-7 order by orderid) as oId
and oId+100 order by orderid

这是错误的。请告诉我哪里出错了

我的目的是从订单表中获得超过7天的100个订单。请不要建议使用row_number

取出它

由于

3 个答案:

答案 0 :(得分:3)

您不能在WHERE子句中使用别名。但是,由于您的子查询只返回一行,您可以将其交叉连接到[order]表并过滤返回的顶部orderid值,如下所示:

SELECT [order].*
FROM [order]
CROSS JOIN (
  SELECT TOP 1 orderid
  FROM [order]
  WHERE createdon < GETDATE() - 7
  ORDER BY orderid
) toporder
WHERE [order].createdon < GETDATE() - 7
  AND [order].orderid BETWEEN toporder.orderid AND toporder.orderid + 100

答案 1 :(得分:3)

select * from 
(
    select top 100 * from [order] where 
    createdon<dateadd(day, -7, getdate())
    order by orderid desc
) 
order by orderid asc

答案 2 :(得分:1)

假设您使用MSSQL,使用TOP关键字来限制输出:

SELECT TOP 100 ...