获取每个post_id的最新结果

时间:2018-07-01 14:40:47

标签: mysql sql database

我使用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 |
+----+--------------+---------+-------------------+---------------------+

自动取款机只能通过以下查询返回以下结果:

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 :(得分: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 :(得分: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的最新记录。但是我不会在这里使用相关的子查询,联接可能会胜过它。