используя подзапрос между операторами - PullRequest
1 голос
/ 21 марта 2012

все,

мой запрос такой

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

Это дает ошибку.Пожалуйста, скажите мне, где это происходит не так

Я собираюсь получить 100 заказов из таблицы заказов, которые старше 7 дней.и, пожалуйста, не предлагайте выбрать его, используя row_number

Спасибо

Ответы [ 3 ]

3 голосов
/ 21 марта 2012

Вы не можете использовать псевдонимы в предложении WHERE.Но так как ваш подзапрос возвращает только одну строку, вы можете перекрестно соединить ее с таблицей [order] и отфильтровать возвращенное значение top 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
3 голосов
/ 21 марта 2012
select * from 
(
    select top 100 * from [order] where 
    createdon<dateadd(day, -7, getdate())
    order by orderid desc
) 
order by orderid asc
1 голос
/ 21 марта 2012

Предположим, вы используете MSSQL, используйте ключевое слово TOP для ограничения вывода:

SELECT TOP 100 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...