所以我在表格中有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)。
非常感谢任何帮助
答案 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)