【问题标题】:Get last result back for each post_id获取每个 post_id 的最后结果
【发布时间】:2018-12-09 23:30:26
【问题描述】:

我使用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 获取最后一次出现的任何建议?

感谢您的回复!

【问题讨论】:

    标签: mysql sql database


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      我会将您的查询使用您的表转换为一个子查询,该子查询在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;
      

      请参阅 Gordon 的答案以更正您的确切查询。基本上,您需要向子查询添加逻辑,将wp_productprofitability 中的每条记录限制为每个post_id 的最新记录。但我不会在这里使用关联子查询,而连接可能会胜过它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        • 2011-12-20
        • 1970-01-01
        • 2015-07-01
        • 2021-03-07
        • 1970-01-01
        • 2016-01-29
        相关资源
        最近更新 更多