php select语句使用max

时间:2016-12-01 01:16:18

标签: php mysql

所以我在表格中有3行

╔══════════════════════════════════════════════════════╗
║ Id TenancyId   StartDate    EndDate       Other Data ║
╠══════════════════════════════════════════════════════╣
║ 31 5198        2016-05-02   NULL                     ║
║ 30 5198        2016-01-08   2016-04-07               ║
║ 29 5198        2016-04-08   2016-05-01               ║
╚══════════════════════════════════════════════════════╝

我正在使用查询: -

SELECT Id, max(StartDate), FrequencyNumber, FrequencyLetter, Arrears FROM PaymentSchedule WHERE TenancyId=5198 GROUP BY TenancyId

我期待当我使用max时,它将返回具有最大日期的行中的所有详细信息但是我在查询中收到此信息...

Array ( [Id] => 30 [max(StartDate)] => 2016-05-02 

所以它选择了最大的开始日期,但是返回了我已经为列编制索引的错误行(ID)。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

这些功能不起作用。它们仅聚合分组列,而其他列随机选择(其他数据库引擎根本不允许这种选择)。 您可以阅读本章手册:http://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

使用...ORDER BY StartDate DESC LIMIT 1的普通选择可以找到具有最大值的单行。

如果您想要多个聚合(例如,为每个组选择“max row”),您需要使用子查询或特殊连接(请参阅:this answer