选择最新数据并按列分组

Selecting most recent data and grouping by a column

我在 table 中的数据如下所示:

appName bytes  timestamp
-------- --------
app1   1   10
app2   2   20
app1   3   30
app2   4   40
app1   5   50

我想要以下输出:

app1   5   50
app2   4   40

即我想要没有重复的最新(按时间戳记)数据。

到目前为止我有以下查询:

select appName,bytes, max(ts) 
from myTable 
group by appName,bytes

但是上面的查询为我提供了两行 app1 和 app2。每个应用程序我只需要一行,它对应于最近的时间戳。

我该怎么办?

找到每个 appnameMax 时间戳,并 join 使用 appnametimestamp 结果返回 table。试试这个。

SELECT a.appname,
       a.bytes,
       a.timestamp
FROM   yourtable a
       INNER JOIN (SELECT Max(timestamp) timestamp,
                    appname
             FROM   yourtable)B
         ON a.appname = b.appname
            AND a.timestamp = b.timestamp
            AND a.appname = b.appname 

或使用Analytic Function

SELECT a.appname,
       a.bytes,
       a.timestamp
FROM  (SELECT *,
              Row_number() OVER(partition BY appname
                  ORDER BY timestamp DESC) rn,          
       FROM   yourtable) a
WHERE  rn = 1