Question

I have two tables... one that contains daily values of various indexes on the stock market, ie, FTSE100, NASDAQ, etc. The columns and some sample data:

id, index_name, date,      value
1,  FTSE100,    03/03/01,  8998.90 

The other table contains stock prices for individual stocks. The columns are:

id, stock_name, date,       value
1,  fb,         02/03/01,   45
2,  twtr,       01/01/01,   398.00
3,  twtr,       02/03/01,   399.50

I need to (ideally in SQL only) query any combination of stocks and indexes, for example, fb, twtr, ftse100 and show it the following output:

 Date,      fb,     twtr,     ftse100
 01/01/01,  null,   398.00,   null
 02/03/01,  45,     399.50,   null
 03/03/01,  null,   null,     8998.90

Could anyone help on how to do this reasonably efficiently? Thank you.

Was it helpful?

Solution

Maybe this could be usefull for your needs:

SELECT date,
       MAX(CASE WHEN name='fb' THEN value ELSE NULL END) AS fb,
       MAX(CASE WHEN name='twtr' THEN value ELSE NULL END) AS twtr,
       MAX(CASE WHEN name='FTSE100' THEN value ELSE NULL END) AS ftse100
  FROM (SELECT date, index_name AS name, value FROM index_table
        UNION
        SELECT date, stock_name AS name, value FROM stock_table)
        AS derivedtable
 GROUP BY date
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top