mysql根据连接查询和最新日期时间获取所有行

时间:2014-01-01 17:16:49

标签: php mysql greatest-n-per-group

您好我有两张桌子:

table1 - eod_stock

  

company_code |打开|高|低| ltp |关闭| ycp | total_volume | total_value |日期时间

表2 - company

  

ID |代码|名字

这里company code = code所以为了获得我使用此代码的所有名称和其他信息:

但是第一个给了我错误,第二个只返回一行,但我需要所有200家公司及其相关信息。

select
  company.code,
  company.name,
  eod_stock.open,
  eod_stock.high,
  max(eod_stock.datetime)
from 
  company
  right join company on company.code= eod_stock.company_code;

select
  eod_stock.company_code,
  max(eod_stock.close),
  eod_stock.total_volume,
  eod_stock.total_trade,
  eod_stock.high,
  eod_stock.low,
  eod_stock.ltp,
  max(eod_stock.datetime),
  company.name 
from
  eod_stock 
  inner join company on (company.code = eod_stock.company_code);

但是第一个给了我错误,第二个只返回一行,但我需要所有200家公司及其相关信息。

3 个答案:

答案 0 :(得分:2)

这里的诀窍是从每个datetime的最大company_code列表开始,您可以使用此基本查询执行此操作:

SELECT company_code, MAX(datetime) AS maxdatetime
FROM eod_stock
GROUP BY company_code

将此加入到获取公司代码,公司名称和日终值的查询中,您应该全部设置:

SELECT
  company.code,
  company.name,
  eod_stock.open,
  eod_stock.high
FROM eod_stock
INNER JOIN company ON company.code = eod_stock.company_code
INNER JOIN (
    SELECT company_code, MAX(datetime) AS maxdatetime
    FROM eod_stock
    GROUP BY company_code) maxdt
  ON maxdt.company_code = eod_stock.company_code AND
     maxdt.maxdatetime = eod_stock.datetime

答案 1 :(得分:0)

你的第一个错误,我想你必须写:

Table2 right join Table1

而非公司权利加入公司

第二个让所有公司全部加入!!

答案 2 :(得分:0)

select
  eod_stock.company_code,
  max(eod_stock.close),
  eod_stock.total_volume,
  eod_stock.total_trade,
  eod_stock.high,
  eod_stock.low,
  eod_stock.ltp,
  max(eod_stock.datetime),
  company.name 
from
  eod_stock 
 inner join company on (company.code = eod_stock.company_code) group by eod_stock.company_code;

dagfr是正确的我需要在查询中添加分组。