选择最新数据并按列分组
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。每个应用程序我只需要一行,它对应于最近的时间戳。
我该怎么办?
找到每个 appname
的 Max
时间戳,并 join
使用 appname
和 timestamp
结果返回 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
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
我在 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。每个应用程序我只需要一行,它对应于最近的时间戳。
我该怎么办?
找到每个 appname
的 Max
时间戳,并 join
使用 appname
和 timestamp
结果返回 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
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