选择最后更改的行我有一个表产品:子查询
id | owner_id | last_activity | box_id
------------------------------------
1 | 2 | 12/19/2014 | null
2 | 2 | 12/13/2014 | null
3 | 2 | 08/11/2014 | null
4 | 2 | 12/11/2014 | 99
5 | 2 | null | 99
6 | 2 | 12/15/2014 | 99
7 | 2 | null | 105
8 | 2 | null | 105
9 | 2 | null | 105
我已经是owner_id的唯一变量。 我需要选择一个用户的所有产品,但是如果产品在一个盒子里,那么应该只选择最新的一个。
样品输出所有者= 2以下:
id | owner_id | last_activity | box_id
------------------------------------
1 | 2 | 12/19/2014 | null
2 | 2 | 12/13/2014 | null
3 | 2 | 08/11/2014 | null
6 | 2 | 12/15/2014 | 99
7 | 2 | null | 105
我不能找到一种方法来选择从盒子的最新产品。
我当前的查询,没有返回正确的值,但可以执行:
SELECT p.* FROM product p
WHERE p.owner_id = 2
AND (
p.box IS NULL
OR (
p.box IS NOT NULL
AND
p.id = (SELECT MAX(pp.id) FROM product pp
WHERE pp.box_id = p.box_id)
)
我试图用日期:
SELECT p.* FROM product p
WHERE p.owner_id = 2
AND (
p.box IS NULL
OR (
p.box IS NOT NULL
AND
p.id = (SELECT * FROM (
SELECT pp.id FROM product pp
WHERE pp.box_id = p.box_id
ORDER BY last_activity desc
) WHERE rownum = 1
)
)
其中给出错误:p.box_id是未定义因为它在第二个子查询中。
你有什么想法,我该如何解决它?
什么是_“最新”_?特别是,你在'last_activity'列中有'NULL'值 - 它们是如何考虑的。 – 2014-12-19 10:00:03
是的,可以有空值作为值。如果盒子内的所有产品都有空白,则应返回MIN(id)。 – irytek102 2014-12-19 10:16:58
这可能是**不是一个好主意,依靠'id'命令的东西。假设您从一个序列填充该列,请考虑并发访问:“id”的“池”可能已被客户端保留,但未立即使用... – 2014-12-19 10:21:05