Получить последний результат назад для каждого post_id - PullRequest
0 голосов
/ 01 июля 2018

Я использую mysqlnd 5.0.12-dev дБ в качестве моего бэкэнда, и я хотел бы вернуться, последняя строка в 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 последнее происшествие?

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

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Я бы сформулировал ваш запрос, используя вашу таблицу, в подзапрос, который находит самую последнюю запись в 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. Но я бы не использовал здесь коррелированный подзапрос, и объединение, вероятно, превзошло бы его.

0 голосов
/ 01 июля 2018

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...