选择最新数据并按列分组

时间:2015-01-17 02:34:00

标签: sql vertica

表格中的数据如下所示:

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。我想每个应用只需要一行,它对应于最新的时间戳。

我应该怎么做?

1 个答案:

答案 0 :(得分:1)

使用Maxappname将每个join appname时间戳和timestamp结果返回到表格。试试这个。

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