带“的SQL请求”;分组方式;及;“最大值”;及;加入;?

带“的SQL请求”;分组方式;及;“最大值”;及;加入;?,sql,mysql,group-by,inner-join,Sql,Mysql,Group By,Inner Join,以下是我的数据示例: 客户属性: ID_CLIENT | DATE_CLIENT | ATTRIBUT ----------+-------------+--------- 000000001 | 2010:03:01 | 0000010 ----------+-------------+--------- 000000001 | 2010:02:16 | 0000010 ----------+-------------+--------- 000000001 | 2010:03:04 |

以下是我的数据示例:

客户属性:

ID_CLIENT | DATE_CLIENT | ATTRIBUT
----------+-------------+---------
000000001 | 2010:03:01  | 0000010
----------+-------------+---------
000000001 | 2010:02:16  | 0000010
----------+-------------+---------
000000001 | 2010:03:04  | 0000011
----------+-------------+---------
000000002 | 2010:03:01  | 0001000
----------+-------------+---------
客户:

ID_CLIENT | NOM_MARITAL |
----------+-------------+
000000001 | PANTROMANI  | 
----------+-------------+
000000002 | ELLOUQUIER  |
----------+-------------+
对于表“CLIENT\u attribute”中的每个ID\u客户机,我希望得到: ID_CLIENT,max(DATE_CLIENT)及其相应的“attribute”和“NOM_”

在上面的例子中:

ID_CLIENT | DATE_CLIENT | ATTRIBUT | NOM_MARITAL |
----------+-------------+----------+-------------+
000000001 | 2010:03:04  | 0000011  | PANTROMANI  |
----------+-------------+----------+-------------+
000000002 | 2010:03:01  | 0001000  | ELLOUQUIER  |

(我正在使用Mysql,但我想它与任何数据库系统都不会有太大的不同)

您应该能够使用如下子查询:

SELECT 
    client.id_client,
    sub_query.date_client,
    client_attribut.attribut,
    client.nom_marital
FROM
    client
INNER JOIN
    (SELECT 
         client_attribut.id_client, 
         MAX(client_attribut.date_client) as date_client
     FROM 
         client_attribut
     GROUP BY 
         client_attribut.id_client)
     AS sub_query ON (sub_query.id_client = client.id_client)
INNER JOIN
    client_attribut ON (client_attribut.id_client = sub_query.id_client AND
                        client_attribut.date_client = sub_query.date_client);

闻起来像是家庭作业,已经在这个网站上回答了很多次。请参阅以获取答案。不幸的是,这是MySQL,在postgresql中,您可以
选择DISTINCT on(id\u client)date\u client,attribute,non\u-mousive FROM client\u attribute使用(id\u client)ORDER BY date\u client DESC加入客户端。这将比当前的解决方案更快更清晰。看起来此解决方案没有给出正确的“attribute”值:在上面的示例中,对于ID_CLIENT=“00000000 1”@dangolive:我的错,它将给出“0000010”而不是“0000011”!现在修好了。非常感谢,现在可以了!对我来说还是有点复杂,我会仔细研究:)