Как составить список всех строк таблицы и при объединении с другой таблицей возможен только первый ее ряд? - PullRequest
0 голосов
/ 23 января 2019

Я настраиваю приложение «Управление заказами», которое должно предоставить списку данных список всех элементов моего каталога и показать для каждого из них «дату последнего заказа». Я также хочу, чтобы товары, которые не были заказаны, отображались без даты последнего заказа.

Я пробовал этот запрос безуспешно

SELECT i.id, i.name, d.name 
FROM items i
JOIN LEFT orders o
ON i.id = o.items

У меня есть эти таблицы в моей базе данных MySQL:

ТЕМА

ID|Name 
-----------
0 |Table
1 |Chair
2 |Screen
3 |Speaker
4 |Keyboard
5 |Laptop
6 |Mug

ЗАКАЗЫ

ID|ITEMS|DATE
-----------------
0 |  0  |20190122
1 |  0  |20181231
2 |  1  |20180601
3 |  3  |20180122
4 |  2  |20171231
5 |  4  |20180501
4 |  6  |20171115
5 |  3  |20180101

И хотел бы следующий вывод:

LAST_ORDER_DATE

ID|NAME    |DATE
--------------------
0 |Table   |20190122
1 |Chair   |20180601
2 |Screen  |20171231
3 |Speaker |20180122
4 |Keyboard|20180501
5 |Laptop  |
6 |Mug     |20171115

Спасибо за любую помощь

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Вы также можете преобразовать существующую строку (если это поле типа char) в формат даты, например, следующий запрос, если необходимо

select  i.id, i.name, max(str_to_date(date,'%Y%m%d'))
FROM items i
LEFT JOIN  orders o ON i.id = o.items 
group by i.id, i.name
0 голосов
/ 23 января 2019

Попробуйте:

измените имена таблиц и столбцов, как у вас есть:

SELECT
    t1.name,
    MAX(t2.pdate) AS last_order_date
FROM
    test t1
    LEFT JOIN test1 t2 ON t1.id = t2.items
GROUP BY
    t2.items,
    t1.name
ORDER BY
    last_order_date;

Таблицы:

enter image description here

enter image description here

Выход:

enter image description here

если вы используете строковое значение в дате, то конвертируйте в дату.

0 голосов
/ 23 января 2019

кажется, вам нужна максимальная дата, чтобы вы могли использовать функцию max () и группировать по

select  i.id, i.name, max(o.date)
FROM items i
LEFT JOIN  orders o ON i.id = o.items 
group by i.id, i.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...