Выбор каждой n-й строки из результата запроса SQL Server 2008, где таблица не имеет столбца столбца строки

Я чувствую себя так близко … Я думаю, что моя проблема в том, как я использую функцию MOD в сочетании с ROW_NUMBER() , но я не понимаю, что я делаю неправильно.

Я использую ROW_NUMBER() потому что мне нужен способ выбрать каждую «n-ю» строку. Я прочитал другие страницы об этом (я использовал их для создания моего SQL) … но я получаю сообщение об ошибке от SQL Server. Мне нужно внутреннее соединение таблицы (2 экземпляра таблицы Tick_OneMin , H1 и H2 ), чтобы одновременно получать цены на разные ценные бумаги.

Если я прокомментирую строку с помощью функции MOD … SQL выполняет отлично … но если я поместил ее в … SQL Server выдает сообщение об ошибке:

Выражение небулевого типа, указанное в контексте, где ожидается условие, рядом с «MOD».

Вот моя попытка SQL –

 SELECT ROW_NUMBER() OVER (ORDER BY H1.CombDateTime ASC) AS RowID, H1.CombDateTime, H1.Close_PX as 'TYA_Close', H2.Close_PX 'ESA_Close' FROM Tick_OneMin as H1, Tick_OneMin as H2 WHERE H1.Ticker = 'TYA' AND H2.Ticker = 'ESA' AND H1.CombDateTime >= '12/28/2012 10:00 AM' AND H1.CombDateTime <= '12/28/2012 10:30 AM' AND H1.CombDateTime = H2.CombDateTime AND RowID MOD 4 = 0 -- this "RowID MOD 4 = 0" is throwing an error in SQL Server ORDER BY H1.CombDateTime ASC 

Моя таблица выглядит следующим образом (1 таблица с 3 столбцами)

Таблица Tick_OneMin

 Ticker - CombDateTime - Close_PX ------------------------------------ ES - 1/3/2012 10:00 AM - 1470 ZN - 1/3/2012 10:00 AM - 132.5 ES - 1/3/2012 10:01 AM - 1475 ZN - 1/3/2012 10:01 AM - 133 

и я хочу создать следующий вывод

 Date - ZN.Price - ES.Price ==== ======== ======== 1/3/2012 - 132.5 - 1470 1/3/2012 - 133 - 1475 

Любые идеи, почему SQL SErver бросает ошибку?

Вы не можете ссылаться на псевдоним, определенный в предложении SELECT предложении WHERE , поскольку WHERE сначала разбирается. Одним из способов является использование подзапроса или CTE:

 WITH x AS ( SELECT ROW_NUMBER() OVER (ORDER BY H1.CombDateTime ASC) AS RowID, ... rest of query ) SELECT CombDateTime, TYA_Close, ESA_Close --, RowID FROM x WHERE RowID % 4 = 0 ORDER BY CombDateTime; 

Обратите внимание также на то, что Мартин и Марк указали – SQL Server использует % не оператор MOD который вы вводите с VB или где-либо еще.

Interesting Posts

LEFT JOIN дает разные данные в зависимости от положения условия WHERE

Эффективный способ получить максимальную дату до указанной даты

Получите одинаковый порядок значений по столбцу

Разбиение на страницы SQL Server 2008 R2

Подключение сообщества Visual Studio 2015 к серверу SQL Express 2016

Выберите значение столбца, которое соответствует комбинации других значений столбцов в одной таблице

как искать одно значение из двух полей из 1 таблицы

Как заставить функцию power () использовать десятичное целое вместо целого?

Какое лучшее решение для доступа к базе данных для SQL-сервера .NET smart client?

Хранимые процедуры SQL Server содержат SQL или вызов для просмотра

как получить записи столбцов в список

Как оптимизировать простой запрос на выбор связанного сервера?

Показывать первое появление «пробела» в столбце

TABLOCK для оптимизации ведения журнала транзакций для оператора insert select

Внедрение Lucene в существующем стеке .NET / SQL Server с несколькими веб-серверами

Давайте будем гением компьютера.