我使用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的最后一次出现?
感谢您的答复!
答案 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
的最新记录。但是我不会在这里使用相关的子查询,联接可能会胜过它。