SQL GROUP BY问题

问题描述:

我要编写一个查询数据库,有这样的表:SQL GROUP BY问题

TABLE HISTORY: 
ID | ITEM_ID | USER_ID | DATE 

ITEM TABLE: 
ID | NAME | OWNER_ID 

历史表中包含的所有操作由用户项的记录。 我必须写一个查询,从HISTORY表中获取所有项目,这些项目不在所有者手中。所以,它应该为每个项目记录最后的记录,并从中选择那些仅仅保留在所有者手中的记录。

我试着使用嵌套查询来写,但如果我用这样的子查询:

SELECT ITEM_ID, MAX(DATE) 
FROM HISTORY 
GROUP BY ITEM_ID 

我不能把这个记录的ID。所以,我不能遍历嵌套的查询结果,因为我不知道它们ID的ID。

你能帮我吗?

P.S.你能否告诉我未来,如何从分组中逐条查询列,而不是按组列出?

我对这个问题的理解是,您希望所有最近的历史记录条目都是由非所有者用户创建的条目。如果我错了,请纠正我。

select h.item_id 
from item i 
    inner join history h 
     on h.item_id = i.id and i.owner_id != h.user_id 
    inner join (select item_id, max(id), max(date) as date 
       from history 
       group by item_id) mh 
     on mh.item_id = h.item_id and h.date = mh.date 

以上查询假定日期时间在日期列中具有一定的唯一性保证。如果没有,你可以使用history.id,如果它是一个完美的自动递增的标识列,并且你保证永远不会让任何人陷入困境(好吧,也许不那么严格,但你明白了我的观点)。

在这种情况下:

select h.item_id 
from item i 
    inner join history h 
     on h.item_id = i.id and i.owner_id != h.user_id 
    inner join (select item_id, max(id) as id 
       from history 
       group by item_id) mh 
     on mh.id = h.id 
+0

是。我也想过使用日期来加入子查询。但是如果在一天之内已经有多个项目的操作。他们有同样的日期。怎么运行的? – Ilnur 2010-11-30 21:14:35