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