如何在Postgres中将日期的组件作为单个日期进行比较?

时间:2014-08-11 11:11:31

标签: sql postgresql

我正在使用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;

因为它单独考虑了日期的每个部分。我如何将这三个部分视为一个单独的日期,同时只需要处理强制性的年份部分,月份和日期部分可能为空。

2 个答案:

答案 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