php - 从 mysql 表中选择每个变量的最新(截至某个日期)记录

标签 php mysql sql join

表结构示例

VarName   Date   Machine
-------------------------
A    date1       machine1
B    date2       machine1
A    date3       machine2
C    date4       machine2
A    date5       machine1
C    date6       machine1
A    date7       machine1

我试图从数据库中过滤的内容应如下所示:

  VarName   Date   Machine
    -------------------------
    A    date1       machine1
    B    date2       machine1
    C    date6       machine1

每个变量只能选择一次,并且每个变量必须是特定日期之前的最新记录。我的语句条件是( WHERE date <= 'some date' AND machine='SomeMachineName' )。 Join 语句可能是解决方案,但我尝试过的任何方法都没有运气。

感谢您的帮助

最佳答案

一种方法在 where 子句中使用相关子查询:

select t.*
from t
where t.date = (select max(t2.date)
                from t t2
                where t2.varname = t.varname and
                      t2.date <= @date
               );

为了提高性能,您需要在 t(varname, date) 上建立索引。

关于php - 从 mysql 表中选择每个变量的最新(截至某个日期)记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45483007/

相关文章:

php - 在单个查询中获取所有推荐用户?

sql - 在数据库中搜索字段

sql - 在sqlite中返回已删除的行

php - 重力形式签名——从 PHP 到 Python

phpMyAdmin - fatal error : Class 'ImportXml' not found

mysql - 根据 SQL 存储过程的值设置输入变量

php - 使用 MySQL 创建触发器

用于多列的 MySQL Select 语句 DISTINCT

c# - 对sql字符串进行单元测试

php - 如何将多个元键作为列运行 SQL 查询,并将它们的值作为行运行?