SQL group by,不确定它叫什么

时间:2013-02-06 15:45:41

标签: sql postgresql group-by greatest-n-per-group

首先,我确定这方面的答案在某处,但我不知道这个特殊问题是什么来搜索它。

我有一个这样的日志表:

id | key | value | timestamp
=====================================
1  | a   | apple | 2013-02-05 01:01:01.0001
2  | b   | bat   | 2013-02-05 01:01:01.0002
3  | a   | apple | 2013-02-05 01:01:01.0003
4  | b   | bat   | 2013-02-05 01:01:01.0004
5  | a   | apple | 2013-02-05 01:01:01.0005
6  | b   | bat   | 2013-02-05 01:01:01.0006

我想进行如下查询:

按时间戳desc

按键顺序从日志组中选择键,值,时间戳

我希望查询返回以下内容:

id | key | value | timestamp
=====================================
5  | a   | apple | 2013-02-05 01:01:01.0005
6  | b   | bat   | 2013-02-05 01:01:01.0006

但是它告诉我,我应该把时间戳放在小组中,以便击败目的。任何帮助将不胜感激。

我正在使用PostgreSQL btw。

3 个答案:

答案 0 :(得分:3)

因为您没有在至少某些字段上使用Aggregate函数,请尝试

SELECT key, value, MAX(timestamp) AS max_timestamp
FROM   log 
GROUP  BY key, value
ORDER  BY max_timestamp DESC

答案 1 :(得分:2)

也许您正在寻找上一个时间戳?类似的东西:

select
    key, 
    value, 
    max(timestamp) t
from 
    log 
group by 
    key,
    value
order by 
    t desc

答案 2 :(得分:0)

要求查看id字段的原始帖子,其他答案似乎忽略了这一点,并且还假设键和值具有1:1映射(不是愚蠢的假设)。

使用每个密钥的最新时间戳从日志中获取行:

with latestLog as (
    select  key, max(timestamp) latestTimestamp
    from    logTable
    group by key)
select  l.*
from    log l join latestLog ll on l.key = ll.key and l.timestamp = ll.latestTimestamp