0

首先,我确定这个问题的答案就在某个地方,但我只是不知道这个特定问题被称为什么来搜索它。

我有一个这样的日志表:

编号 | 关键 | 价值 | 时间戳
======================================
1 | 一个 | 苹果| 高分辨率照片| CLIPARTO 2013-02-05 01:01:01.0001
2 | 乙 | 蝙蝠 | 2013-02-05 01:01:01.0002
3 | 一个 | 苹果| 高分辨率照片| CLIPARTO 2013-02-05 01:01:01.0003
4 | 乙 | 蝙蝠 | 2013-02-05 01:01:01.0004
5 | 一个 | 苹果| 高分辨率照片| CLIPARTO 2013-02-05 01:01:01.0005
6 | 乙 | 蝙蝠 | 2013-02-05 01:01:01.0006

我想做一个像这样的查询:

从日志组中选择键、值、时间戳 按时间戳顺序排列

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

编号 | 关键 | 价值 | 时间戳
======================================
5 | 一个 | 苹果| 高分辨率照片| CLIPARTO 2013-02-05 01:01:01.0005
6 | 乙 | 蝙蝠 | 2013-02-05 01:01:01.0006

但它告诉我,我应该将时间戳放在违背目的的组中。任何帮助将非常感激。

我正在使用 PostgreSQL 顺便说一句。

4

3 回答 3

3

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

SELECT key, value, MAX(timestamp) AS max_timestamp
FROM   log 
GROUP  BY key, value
ORDER  BY max_timestamp DESC
于 2013-02-06T15:48:10.630 回答
2

也许您正在寻找最后一个时间戳?就像是:

select
    key, 
    value, 
    max(timestamp) t
from 
    log 
group by 
    key,
    value
order by 
    t desc
于 2013-02-06T15:48:58.390 回答
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
于 2013-02-06T16:00:33.527 回答