SQL-запрос с «Группировать по» и «Макс» и «Присоединиться»? - PullRequest
1 голос
/ 02 марта 2010

Вот образец моих ДАННЫХ:

CLIENT_ATTRIBUT:

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  |
----------+-------------+

Я хотел бы получить для каждого ID_CLIENT в таблице "CLIENT_ATTRIBUT":
ID_CLIENT, max (DATE_CLIENT) с соответствующим «ATTRIBUT» и «NOM_MARITAL»

Итак, в приведенном выше примере:

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

(я работаю с Mysql, но, полагаю, он не должен сильно отличаться ни от какой системы баз данных)

1 Ответ

2 голосов
/ 02 марта 2010

Вы можете использовать подзапрос следующим образом:

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);
...