Получить последний результат назад для каждого post_id

0

Я использую mysqlnd 5.0.12-dev db в качестве моего бэкэнд, и мне бы хотелось вернуться, последняя строка в wp_productprofitability для каждого post_id.

У меня есть следующая настройка:

wp_post:

+----+--------------+
| ID | title        |
+----+--------------+
| 10 | My Product 1 |
+----+--------------+
| 11 | My Product 2 |
+----+--------------+
| 6  | My Product 3 |
+----+--------------+

wp_productprofitability

+---------+-------------------+---------------------+
| post_id | daily_grossProfit | created_at          |
+---------+-------------------+---------------------+
| 10      | 3.5               | 2018-06-18 07:36:00 |
+---------+-------------------+---------------------+
| 11      | 4                 | 2018-06-17 07:35:00 |
+---------+-------------------+---------------------+
| 10      | 5                 | 2018-06-16 07:34:00 |
+---------+-------------------+---------------------+
| 11      | 7                 | 2018-06-17 07:36:00 |
+---------+-------------------+---------------------+
| 10      | 5                 | 2018-06-15 07:36:00 |
+---------+-------------------+---------------------+
| 6       | 3.6               | 2018-06-12 07:34:00 |
+---------+-------------------+---------------------+
| 10      | 2                 | 2018-06-14 07:32:00 |
+---------+-------------------+---------------------+
| 6       | 6                 | 2018-06-13 07:31:00 |
+---------+-------------------+---------------------+

Ожидаемый результат:

+----+--------------+---------+-------------------+---------------------+
| ID | title        | post_id | daily_grossProfit | created_at          |
+----+--------------+---------+-------------------+---------------------+
| 10 | My Product 1 | 10      | 3.6               | 2018-06-18 07:36:00 |
+----+--------------+---------+-------------------+---------------------+
| 11 | My Product 2 | 11      | 4                 | 2018-06-17 07:36:00 |
+----+--------------+---------+-------------------+---------------------+
| 6  | My Product 3 |  6      | 5                 | 2018-06-16 07:34:00 |
+----+--------------+---------+-------------------+---------------------+

Atm Я получаю следующий результат только для следующего запроса:

SELECT
    *
FROM
    wp_posts p
INNER JOIN wp_productprofitability m ON
    m.post_id = p.ID
WHERE
    m.created_at =(
    SELECT
        MAX(u.created_at)
    FROM
        wp_productprofitability u
)
ORDER BY
    m.daily_grossProfit
DESC

Текущий результат:

+----+--------------+---------+-------------------+---------------------+
| ID | title        | post_id | daily_grossProfit | created_at          |
+----+--------------+---------+-------------------+---------------------+
| 10 | My Product 1 | 10      | 3.6               | 2018-06-18 07:36:00 |
+----+--------------+---------+-------------------+---------------------+
| 11 | My Product 2 | 11      | 4                 | 2018-06-17 07:36:00 |
+----+--------------+---------+-------------------+---------------------+   

Любые предложения, как получить для каждого post_id последнее присутствие?

Я ценю ваши ответы!

Теги:
database

2 ответа

1
Лучший ответ

Вы близки. Вам просто нужна фраза корреляции:

SELECT *
FROM wp_posts p INNER JOIN
     wp_productprofitability pp
     ON pp.post_id = p.ID
WHERE m.created_at = (SELECT MAX(pp2.created_at)
                      FROM wp_productprofitability pp2
                      WHERE pp2.post_id = pp.post_id
                     )
ORDER BY pp.daily_grossProfit DESC
1

Я бы использовал ваш запрос, используя вашу таблицу, в подзапрос, который находит самую последнюю запись в wp_productprofitability для каждого post_id:

SELECT
    t1.ID,
    t1.title,
    t2.post_id,
    t2.daily_grossProfit,
    t2.created_at
FROM wp_post t1
INNER JOIN wp_productprofitability t2
    ON t1.ID = t2.post_id
INNER JOIN
(
    SELECT post_id, MAX(created_at) AS max_created_at
    FROM wp_productprofitability
    GROUP BY post_id
) t3
    ON t2.post_id = t3.post_id AND t2.created_at = t3.max_created_at;

См. Ответ Гордона для исправления вашего точного запроса. В принципе, вам нужно добавить логику в подзапрос, который ограничивает каждую запись в wp_productprofitability последним для каждого post_id. Но здесь я бы не использовал коррелированный подзапрос, и соединение, вероятно, превзойдет его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню