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?
How to Select All Records from One Table That Do Not Exist in Another Table in SQL? We can get the records in one table that doesn't exist in another table by using NOT IN or NOT EXISTS with the subqueries including the other table in the subqueries.
Here's the SQL query to select every nth row in MySQL. mysql> select * from table_name where table_name.id mod n = 0; In the above query, we basically select every row whose id mod n value evaluates to zero.
SELECT * FROM Employee; Now let's display the Nth record of the table. Syntax : SELECT * FROM <table_name> LIMIT N-1,1; Here N refers to the row which is to be retrieved.
The SQL SELECT TOP Clause The SELECT TOP clause is used to specify the number of records to return. The SELECT TOP clause is useful on large tables with thousands of records. Returning a large number of records can impact performance.
You can't reference an alias defined in the SELECT
clause in the WHERE
clause, since WHERE
is parsed first. One workaround is to use a subquery or 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;
Note also what Martin and Marc have pointed out - SQL Server uses %
not the MOD
operator you're bringing in from VB or elsewhere.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With