0

まず、これに対する答えはどこかにあると確信していますが、この特定の問題を検索するために何と呼ばれているのかわかりません。

次のようなログテーブルがあります。

ID | キー | 値 | タイムスタンプ
=====================================
1 | | | リンゴ | 2013-02-05 01:01:01.0001
2 | b | コウモリ | 2013-02-05 01:01:01.0002
3 | | | リンゴ | 2013-02-05 01:01:01.0003
4 | b | コウモリ | 2013-02-05 01:01:01.0004
5 | | | リンゴ | 2013-02-05 01:01:01.0005
6 | b | コウモリ | 2013-02-05 01:01:01.0006

次のようなクエリを実行したい:

ロググループからキー、値、タイムスタンプをキー順に選択し、タイムスタンプの順に並べます。

クエリで次のものが返されるようにします。

ID | キー | 値 | タイムスタンプ
=====================================
5 | | | リンゴ | 2013-02-05 01:01:01.0005
6 | b | コウモリ | 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 に答える