我正在使用Postgres 9.3。鉴于此表:
CREATE TABLE release_country
(
release integer NOT NULL,
country integer NOT NULL,
date_year smallint,
date_month smallint,
date_day smallint,
)
我想要每个版本的最早记录列表,换句话说,表中可能有多个记录用于同一版本但不同的国家/地区。我想要一个包含发布和最早日期的列表,但他不会工作
select distinct release, min(t1.date_year), min(t1.date_month), min(t1.date_day)
FROM release_country t1
GROUP BY release;
因为它单独考虑了日期的每个部分。我如何将这三个部分视为一个单独的日期,同时只需要处理强制性的年份部分,月份和日期部分可能为空。
答案 0 :(得分:1)
SELECT DISTINCT ON (release) *
FROM release_country
ORDER BY release, date_year, date_month, date_day;
我会考虑存储一个date
列,而不是三个smallint
个数字。这总体来说更清洁,也可能更便宜。
DISTINCT ON
的解释:
答案 1 :(得分:0)
尝试类似:
SELECT distinct on (release) *
FROM release_country
ORDER BY release, date_year, date_month, date_day