首先,我确定这方面的答案在某处,但我不知道这个特殊问题是什么来搜索它。
我有一个这样的日志表:
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。
答案 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