I need some help with SQL.

I have a set of stock symbols and a set of internal product IDs which map 
1-to-1 to those symbols.  Sometimes the mapping changes (for example, when the 
symbol changes its meaning on the exchange).  

So I have a SQL table that tells me the symbol, the product ID, and the date.  
This table was initialized with all the symbols and their first product IDs, 
and a new row is added with symbol, (new) product_id, and date whenever a 
mapping changes.

What I want is, for a given set of symbols, and a particular date, the product 
ID for that symbol as of that date.  

Obviously, the mapping for a particular symbol may changed 0 or more times on 
or before that date, so the table will have 1 or more symbol, product_id, date 
entries for each symbol.

In J, a model of the function I want is:


        map_it =: verb define
           filter    =.  (symbol__x e. symbol__y) *. date__x <: some_date
        
           rows      =.  filter # prod_id__x ,. date__x

           prod_ids  =.  ({.@:/:/ @: |:/.~ {."1) rows
        
           symbol__y ,. prod_ids
        )

           NB.            {.@:/: lots slower than {~ (i. >./)@:;


where the arguments to the verbs are two objects (locales) representing the 
tables and, e.g.  symbol__x  is the symbol column from the left table.

What I need is the SQL equivalent.  I made the follow attempt, but it doesn't 
work:


        SELECT 
                 TOP 1 
                         y.symbol,
                         x.prod_id,

        FROM 
                 x, 
                         y

        WHERE 
                        x.date <= @some_date
                AND
                   x.symbol = y.symbol

        GROUP BY
                y.symbol

        ORDER BY
                x.date 
        DESC


the SQL engine complains that for each column I want in the output, I need to 
either include it in the GROUP BY clause, or use an aggregation function on it 
in the SELECT clause.   Apparently TOP 1 doesn't count as an aggregation 
function.

Suggestions?

-Dan






----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to