2013-04-11 84 views
-1

我有一张名为eod的表,并且有一个示例。SQL - 多个请求中只有一个

| eod_id | company_symbol | date | open | close | high | low | 
|  1 |   AAA | 01-01-2000 | 40.00 | 42.00 | 43.00 | 39.00 | 

对于给定的company_symbol,我想:

  1. 计算(开放的日期)/(接近为其他日期) - 1
  2. 计数的行,其中开放>靠近
  3. 算上行,其中开<接近
  4. 为每一天的次数,其中company_symbol具有最高收盘
  5. 每天,company_symbol有 最低关闭次数

我试图获取我想要的信息,但是我没有成功。 只有一个请求可以获得5个信息吗?

希望你能帮助我,谢谢 ,

史蒂夫

PS:我试了一下:

1.

SELECT (SELECT OPEN FROM eod WHERE company_symbol="AAPL" AND DATE="2013-04-05") 
/(SELECT OPEN FROM eod WHERE company_symbol="AAPL" AND DATE="2000-01-03") - 1; 

2.

SELECT COUNT(*) FROM eod WHERE company_symbol="AAPL" AND CLOSE>OPEN; 

3.

SELECT COUNT(*) FROM eod WHERE company_symbol="AAPL" AND CLOSE<OPEN; 
  1. SELECT COUNT(*)FROM EOD WHERE company_symbol IN(SELECT company_symbol FROM EOD WHERE关闭(SELECT MAX(CLOSE)FROM EOD GROUP BY DATE));

但是这一个不起作用,你能帮助我吗? 我也认为这些请求可以简化,但我不知道如何。

+4

你能告诉我们你试过什么,所以我们可以指出任何可能的更正 – CloudyMarble 2013-04-11 09:59:17

+0

我在我的第一篇文章中添加了它 – user2269756 2013-04-12 08:41:32

+0

任何想法?在此先感谢 – user2269756 2013-04-15 06:09:53

回答

0

如果你只需要组“中只有一个要求5级的信息”,尽量让5个请求你想要的东西,然后就

SELECT 
(%your_request1%) as 'Request 1', 
(%your_request2%) as 'Request 2', 
(%your_request3%) as 'Request 3', 
(%your_request4%) as 'Request 4', 
(%your_request5%) as 'Request 5' 
FROM EOD e 
WHERE company_symbol=AAA 

,或者你还需要这5个请求?

+0

是的,我想分组这5个请求,但通过这样做,我会读5次表。为了提高性能,我想读一次表格。感谢您的帮助 – user2269756 2013-04-11 11:46:42

+0

您是否真的需要这种性能提升?你是否在%a_lot%次运行这个查询并且缺乏性能? – 2013-04-11 11:49:58

+0

我添加了我在第一篇文章中提出的请求。表中大约有150万行,一个请求大约需要2秒。你能帮我简化我的请求吗? – user2269756 2013-04-12 08:41:52