Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p><strong>UPDATE:</strong></p> <p>Incorporating @<a href="https://stackoverflow.com/users/215752/hogan">Hogan</a>'s suggestion fully ... and testing it. :) This <code>EXPLAIN</code>s much simpler, and should be a better performer.</p> <p>Again, presuming <code>ANSI_QUOTES</code> behavior:</p> <pre><code>SELECT tq.sym AS sym, (100*(alast.adj_nav - afirst.adj_nav)/afirst.adj_nav) AS quarterly_returns FROM (SELECT symbol_header_id AS sym, -- find first/last traded day ("ftd", "ltd") MIN("date") AS ftd, MAX("date") AS ltd FROM symbol_details WHERE "date" BETWEEN @quarterstart AND @quarterend GROUP BY 1) tq JOIN symbol_details afirst -- JOIN for ADJ_NAV on first traded day ON tq.sym = afirst.symbol_header_id AND tq.ftd = afirst."date" JOIN symbol_details alast -- JOIN for ADJ_NAV on last traded day ON tq.sym = alast.symbol_header_id AND tq.ltd = alast."date" </code></pre> <p><strong>ORIGINAL:</strong></p> <p>Presuming <code>SET SESSION sql_mode = 'ANSI_QUOTES'</code>, try this:</p> <pre><code>SELECT tq.sym AS sym, (100*(adj_end - adj_begin)/adj_begin) AS quarterly_returns FROM -- First, determine first traded days ("ftd") and last traded days -- ("ltd") in this quarter per symbol (SELECT symbol_header_id AS sym, MIN("date") AS ftd, MAX("date") AS ltd FROM symbol_details WHERE "date" BETWEEN @quarterstart AND @quarterend GROUP BY 1) tq JOIN -- Second, determine adjusted NAV for "ftd" per symbol (see WHERE) (SELECT symbol_header_id AS sym, "date" AS adate, adj_nav AS adj_begin FROM symbol_details) afirst ON afirst.sym = tq.sym JOIN -- Finally, determine adjusted NAV for "ltd" per symbol (see WHERE) (SELECT symbol_header_id AS sym, "date" AS adate, adj_nav AS adj_end FROM symbol_details) alast ON alast.sym = tq.sym WHERE afirst.adate = tq.ftd AND alast.adate = tq.ltd; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload