表格中的数据如下所示:
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。我想每个应用只需要一行,它对应于最新的时间戳。
我应该怎么做?
答案 0 :(得分:1)
使用Max
和appname
将每个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
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