2012-03-05 29 views
1

一些数据将被正是如此安排:SQL分组 - 扔掉旧的结果

ID DATE COUNT1 COUNT2 
A 20120101 1 2 
A 20120201 2 2 
B 20120101 3 0 
C 20111201 1 0 
C 20120301 2 2 

另一个表有ID NAME

   A MYNAME 
       .... etc 

我想返回的

ID NAME COUNT COUNT2 

一个表最近可用的数据,即1月份的数据不包括在内

我知道我需要使用HAVING,INNER JOIN和GROUP BY,但是每次迭代都会出现错误。

+0

什么RDBMS和版本您使用的? – 2012-03-05 19:13:04

+0

@JoeStefanelli他使用nosql – 2012-03-05 19:39:56

+0

@ user1245973我不明白你在问什么,也不知道另一个表的结构是什么。你能详细描述两者吗? – 2012-03-05 20:13:15

回答

1

如果你只想与日行等于全球最大日期,只是使用子查询:

select ID,DATE,COUNT1,COUNT2 
from table 
where DATE=(select max(DATE) from table); 

如果你想每ID的最大日期,那么你可以使用一个自联接:

select ID,MAX_DATE,COUNT1,COUNT2 
from(
    select ID,max(DATE) as MAX_DATE 
    from table 
    group by ID 
)a 
join(
    select ID,DATE,COUNT1,COUNT2 
    from table 
)b 
on (a.ID=b.ID and a.MAX_DATE=b.DATE); 
+1

该子查询将返回整个表的最大日期,而不是每个ID。 – 2012-03-05 19:15:18

+0

好吧,目前还不清楚OP是否需要每个ID的最大日期。然而,列梅编辑。 – 2012-03-05 19:16:00

+0

在那里,编辑。 – 2012-03-05 19:21:04

1

不一定。这也应该工作:

select t1.id, t2.name, t1,count1, t1.count2 
from table_1 t1 join table_2 t2 on (t1.id = t2.id) 
where not exists (
    select 1 
    from table_1 t3 
    where t1.id = t3.id 
    and t1.date < t3.date) 
order by 1; 
0

你需要一个相关子查询:

SELECT Id, Name, Count1, Count2 
FROM CountsTable AS T1 INNER JOIN NamesTable ON T1.Id=NamesTable.Id 
WHERE CountsTable.Date = (
    SELECT Max(Date) From CountsTable AS T2 WHERE T1.Id=T2.Id 
    )