1

如果我有一个格式如下的表格:

ID NAME NUM TIMESTAMP BOOL
1  A    5   09:50     TRUE 
1  B    6   13:01     TRUE
1  A    1   10:18     FALSE   
2  A    3   12:20     FALSE
1  A    1   05:30     TRUE
1  A    12  06:00     TRUE

如何获取每个唯一 ID、NAME 对与最新时间戳和 BOOL=TRUE 的 ID、NAME 和 NUM。

所以对于上表,输出应该是:

ID NAME NUM
1  A    5
1  B    6   

我尝试使用 Group By 但我似乎无法解决我需要在 num 周围放置一个聚合器函数(应用于此示例时 max,min 将不起作用)或在 group by 中指定它(最终将匹配 ID 、NAME 和 NUM 组合)。据我所知,两者在某些情况下都会中断。

PS:我正在使用SQL Developer(我认为是Oracle开发的SQL,对不起我是新手)

4

3 回答 3

2

如果您至少使用 SQL-Server 2005,则可以使用以下ROW_NUMBER功能:

WITH CTE AS
(
   SELECT ID, NAME, NUM,
      RN = ROW_NUMBER()OVER(PARTITION BY ID, NAME ORDER BY TIMESTAMP DESC)
   FROM Table
   WHERE BOOL='TRUE'
)
SELECT ID, NAME, NUM FROM CTE
WHERE RN = 1

结果:

ID     NAME   NUM    
1       A      5     
1       B      6     

这是小提琴:http ://sqlfiddle.com/#!3/a1dc9/10/0

于 2012-07-20T08:53:31.973 回答
0
select t1.* 
from TABLE1 as t1 
left join
TABLE1 as t2 
on t1.name=t2.name and t1.TIMESTAMP>t2.TIMESTAMP
where t1.BOOL='TRUE' and t2.id is null

应该为你做。

于 2012-07-20T09:01:49.420 回答
0
select t1.* from table as t1 inner join
(
select NAME, NUM, max(TIMESTAMP) as TIMESTAMP from table
where BOOL='TRUE'
) as t2
on t1.name=t2.name and t1.num=t2.num and t1.timestamp=t2.timestamp
where t1.BOOL='TRUE'
于 2012-07-20T08:54:05.670 回答