我有下表:
天 | 名称 | val|
---|---|---|
2021年1月12日 | Een | <1>|
2021年1月11日 | Twee | 12|
2021年1月12日 | Drie | 0|
2021年1月12日 | 推特 | <1>|
2021年1月11日 | Drie | 19 |
2021年1月11日 | Een | <11>
使用distinct on
:
select distinct on (day) t.*
from t
order by day, val desc;
您还可以使用WINDOW函数,以避免DISTINCT ON,并在其他品牌的数据库上进行操作。row_number((和ORDER BY将起作用:
WITH i AS (
SELECT
name
, val
, day
, row_number() OVER(PARTITION BY name ORDER BY val DESC, day)
FROM table t
)
SELECT name
, val
, day
FROM i
WHERE row_number = 1; -- one result for every name, the first one
您可以尝试下面的sql。
WITH max_val AS (
SELECT MAX(val) AS max_val
,day
FROM TABLE t
GROUP BY day
)
SELECT max_val.max_val
,t.name
,t.day
FROM TABLE t
INNER JOIN max_val
ON t.day = max_val.day
;