MySQL: объединение 2 таблиц и отображение последней даты дочерней таблицы - PullRequest
0 голосов
/ 01 апреля 2019

Мне нужно отобразить список клиентов с их общим количеством покупок и общей потраченной суммой, а также мне нужен столбец с датой их ПОСЛЕДНЕЙ покупки.

Это мой текущий запрос, ноон не отображает последнюю доступную дату последней покупки:

SELECT user.id_user AS id,
purchase.date_insert AS last_purchase,
CONCAT(user.lastname, " ", user.name) AS name,
COUNT(purchase.id_purchase) AS purchases,
SUM(purchase.total) AS total
FROM user
JOIN purchase ON purchase.id_user = user.id_user
GROUP BY user.id_user
ORDER BY name

Вместо того, чтобы просто использовать purchase.date_insert AS last_purchase (который извлекает первое доступное значение этого столбца), мне нужно получить последнее доступное значениедля этого столбца.

Вот sqlfiddle структуры и некоторый образец данных: http://sqlfiddle.com/#!9/d83684/1

Как видно из примера, в столбце last_purchase отображается 2019-03-26T09: 38: 40Z , и должно быть 2019-04-01 12: 01: 24Z .

Спасибо!

Ответы [ 2 ]

3 голосов
/ 01 апреля 2019

Я думаю, что вы должны хотеть max():

SELECT u.id_user AS id,
       MAX(p.date_insert) AS last_purchase,
       CONCAT(u.lastname, ' ', user.name) AS name,
       COUNT(p.id_purchase) AS purchases,
       SUM(p.total) AS total
FROM user u JOIN
     purchase p
     ON p.id_user = u.id_user
GROUP BY u.id_user
ORDER BY MAX(u.name);

В большинстве баз данных - включая более свежие версии MySQL с настройками по умолчанию - ваш запрос вернет ошибку.В SELECT и ORDER BY есть столбцы, которые не являются ключами агрегации и не агрегированы.

0 голосов
/ 01 апреля 2019

просто используйте max ()

SELECT user.id_user AS id,
max(purchase.date_insert) AS last_purchase,
CONCAT(user.lastname, " ", user.name) AS name,
COUNT(purchase.id_purchase) AS purchases,
SUM(purchase.total) AS total
FROM user
JOIN purchase ON purchase.id_user = user.id_user
GROUP BY user.id_user,user.lastname,user.name
ORDER BY name

, и я предпочитаю использовать группирование по неагрегированным столбцам в группе по thoguh mysql не возвращает ошибку, если не использовал их в группе по

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...