簡體   English   中英

通過選擇SQL中的多個列來選擇列

[英]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。

您可以使用子查詢來獲取每個namemax(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM