如果我的表格格式如下:
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的ID,NAME和NUM,NAME对与最新的时间戳和BOOL = TRUE。
因此,对于上表,输出应为:
ID NAME NUM
1 A 5
1 B 6
我尝试使用Group By但是我似乎无法解决这个问题,我需要将聚合器函数放在num周围(max,min在应用于此示例时不起作用)或者在group by中指定它(最终会匹配ID,NAME和NUM组合)。在某些情况下,我认为都会破坏。
PS:我正在使用SQL Developer(这是Oracle开发的SQL我认为,抱歉我是新手)
答案 0 :(得分: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
答案 1 :(得分: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'
答案 2 :(得分: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
应该为你做。