[英]Select columns by choosing column multiple columns in SQL
想象一下以下示例表:
time name value1 value2
12:00 Hans 2 4
12:30 Hans 2 4
13:00 Hans 3 5
14:00 Peter 4 4
15:00 Peter 4 4
我想按最大時間戳和名稱進行過濾。
意思是我想得到
13:00 Hans 3 5
15:00 Peter 4 4
按名稱使用表組中的select max(time),name,value1,value2無效。 它告訴我在value1和value2上也使用聚合函數或group by。
如果我按名稱,值1和值2分組,那么由於兩行漢斯的值1和值2不同,因此我得到以下結果:
12:30 Hans 2 4
13:00 Hans 3 5
15:00 Peter 4 4
解決辦法是什么?
編輯:這是一個PostgreSQL。
您可以使用子查詢來獲取每個name
的max(time)
,然后將其聯接回表以獲取最終結果:
select t1.time,
t1.name,
t1.value1,
t1.value2
from yourtable t1
inner join
(
select max(time) MaxTime, name
from yourtable
group by name
) t2
on t1.time = t2.maxtime
and t1.name = t2.name
根據所使用的數據庫,如果可以應用諸如row_number()
或rank()
類的窗口函數,則查詢將類似於以下內容:
select time, name, value1, value2
from
(
select time, name, value1, value2,
rank() over(partition by name order by time desc) rn
from yourtable
) src
where rn = 1
請參閱帶有兩個查詢的演示的SQL Fiddle
distinct on
就很簡單。 SQL小提琴
select distinct on (name)
"time", name, value1, value2
from t
order by t.name, t."time" desc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.