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

标签 php mysql greatest-n-per-group

您好,我有两个表:

表1 - eod_stock

company_code | open | high | low | ltp | close | ycp | total_volume | total_value | datetime

表 2 - 公司

ID | code | name

此处公司代码=代码因此为了获取所有名称和其他信息,我使用了以下代码:

但第一个给了我错误,第二个仅返回一行,但我需要所有 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 个公司及其相关信息。

最佳答案

这里的技巧是从每个 company_code 的最大 datetime 列表开始,您可以使用以下基本查询来完成:

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

关于php - mysql 根据连接查询和最新日期时间获取所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20871115/

相关文章:

php - 使用 LEFT JOIN 结合 WHERE 子句进行搜索

mysql - 从表中的组中挑选出最高的十个值或最高的 10% 的查询

mysql - 组前选择顺序

php - 动态检查 mySQL 数据库以查看当前时间是否已超过存储在数据库中的日期时间

php - 在 Windows : how to fix "PHP Startup: Unable to load dynamic library" issues? 中运行 PHP

php - 如何设计MySQL数据库

mysql - 查询以计算日期范围内已购买数据包的使用量

mysql - 从本地 infile 加载到 mysql 中的表时如何禁用双引号插入?

sql - 获取列表中每个 ID 的前 3 行

php - 动态 PDO 查询中的整数值