SELECT STOCK_SYMBOL FROM daily
WHERE DAILY_DATE > '2011-03-01 23:59:59'
GROUP BY STOCK_SYMBOL HAVING MAX(DAILY_CHANGE_PERCENT) < -0.1
这是我的结构:
STOCK_ID STOCK_SYMBOL DAILY_DATE DAILY_CHANGE_PERCENT
1 GOOG 2011-03-03 01:01:01 -0.300
我试图只获得该日期范围内每个日期的股票,DAILY_CHANGE_PERCENT
低于-0.1
目前我的结果好坏参半。
有效结果的示例:
STOCK_ID STOCK_SYMBOL DAILY_DATE DAILY_CHANGE_PERCENT
1 GOOG 2011-03-03 01:01:01 -0.300
1 GOOG 2011-03-04 01:01:01 -0.110
1 GOOG 2011-03-05 01:01:01 -0.500
1 GOOG 2011-03-06 01:01:01 -0.200
谢谢,
答案 0 :(得分:1)
要获得所有列的"valid result"
,这是您使用的吗?
SELECT daily.STOCK_ID, STOCK_SYMBOL, DAILY_DATE, DAILY_CHANGE_PERCENT
FROM daily
join (
SELECT STOCK_ID
FROM daily
WHERE DAILY_DATE > '2011-03-01 23:59:59'
GROUP BY STOCK_ID
HAVING MAX(DAILY_CHANGE_PERCENT) < -0.1
) X ON X.STOCK_ID = daily.STOCK_ID
WHERE DAILY_DATE > '2011-03-01 23:59:59'
如果有重复的符号,我换成了stock_id 另请注意,我使用了两次日期过滤器。
答案 1 :(得分:0)
您需要一组独特的股票代码,其中指定期间的价格有任何下跌,并且您希望从该组股票代码中删除任何在指定期间内任何一天价格上涨的股票。仅仅寻找小于'x'的最大跌幅并不排除可能在某些时候上涨的股票。
答案 2 :(得分:0)
您拥有DAILY_CHANGE_PERCENT
列的数据类型是什么?
如果这是varchar
左右,则低于 - 不会起作用。
否则 - 我看看你的查询,似乎没问题。
<强>更新强>
或试试这个:
SELECT STOCK_SYMBOL
FROM daily
GROUP BY STOCK_SYMBOL
HAVING MAX(DAILY_CHANGE_PERCENT) < -0.1 AND DAILY_DATE > '2011-03-01 23:59:59'