I feel so close… I think my problem is how I’m using the MOD function combined with the ROW_NUMBER() function, but I don’t understand what I’m doing wrong.
I’m using the ROW_NUMBER() function because I need a way to select every “nth” row. I’ve read the other pages about this (I used them to create my SQL)…but I’m getting an error from SQL Server. I need the inner table join (2 instances of the table Tick_OneMin, H1 and H2) to get prices of different securities at the same time snapshot.
If I comment out the line with the MOD function…the SQL executes fine…but if I put it in….SQL Server throws the error message:
An expression of non-boolean type specified in a context where a condition is expected, near ‘MOD’.
Here is my attempt at the 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
My table looks like the following (1 table with 3 columns)
Table 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
and I want to create the following output
Date - ZN.Price - ES.Price
==== ======== ========
1/3/2012 - 132.5 - 1470
1/3/2012 - 133 - 1475
Any ideas why SQL SErver is throwing the error?
You can’t reference an alias defined in the
SELECTclause in theWHEREclause, sinceWHEREis parsed first. One workaround is to use a subquery or CTE:Note also what Martin and Marc have pointed out – SQL Server uses
%not theMODoperator you’re bringing in from VB or elsewhere.